2019-05-23 java学习日记

静态static注意事项

 在静态方法中是没有this关键字的

1,静态是随着类的加载而加载,this是随着对象的创建而存在。

2,静态比对象先存在。

静态方法只能访问静态的成员变量和静态的成员方法 

静态方法:

 成员变量:只能访问静态变量
 成员方法:只能访问静态成员方法

 非静态方法: 

成员变量:可以是静态的,也可以是非静态的
成员方法:可是是静态的成员方法,也可以是非静态的成员方法。
 

简单记:

 静态只能访问静态。

例子:

 1 class Demo2_Static {
 2     public static void main(String[] args) {
 3         //Demo d = new Demo();
 4         //d.print1();
 5         //Demo d = new Demo();
 6         //System.out.println(d.num1);
 7         System.out.println(Demo.num1);
 8         //Demo.print2();
 9     }
10 }
11 
12 class Demo {
13     int num1 = 10;                    //非静态的成员变量
14     static int num2 = 20;                //静态的成员变量
15 
16     /*public void print1() {            
17 //非静态的成员方法,既可以访问静态的成员也可以访问非静态的
18         System.out.println(num1);
19         System.out.println(num2);
20     }*/
21     public static void print2() {        //静态的成员方法
22         //System.out.println(this.num1);
23 //静态的成员方法不能访问非静态的,错误: 无法从静态上下文中引用非静态变量num1
24         System.out.println(num2);
25     }
26 }

 

 静态变量和成员变量的区别

静态变量也叫类变量  成员变量也叫对象变量

所属不同:

  静态变量属于类,所以也称为类变量

  成员变量属于对象,所以也称为实例变量(对象变量)

内存中位置不同:

  静态变量存储于方法区的静态区

  成员变量存储于堆内存

内存出现时间不同:

  静态变量随着类的加载而加载,随着类的消失而消失

  成员变量随着对象的创建而存在,随着对象的消失而消失

调用不同:

  静态变量可以通过类名调用,也可以通过对象调用

  成员变量只能通过对象调用

 

public static void main(String[] agrs){}

public : 被jvm调用,所以权限要足够大
static : 被jvm调用,不需要创建对象,直接类名.调用即可
void : 被jvm调用,不需要有任何的返回值
main : 只有这样写才能被jvm识别,
main不是关键字
String[] args : 以前是用来接收键盘录入的,现在用Scanner键盘录入

注:这里唯一能改的就是agrs,它就是一个变量名,是参数是意思,
以前是用argument,但是嫌太长了,于是变改成了args。

 

 如果一个类中的所有方法都是静态的,那么就多做一步,把构造方法私有化,
目的是不让其他类创建本类对象。

 

例子:做一个包含获取数组最大值,数组的遍历以及数组的反转的数组工具类以及说明书。

 1 /**
 2 
 3 这是一个数组工具类,里面封装了查找数组最大值,打印数组,数组反转的方法
 4 
 5 @author fengjia
 6 
 7 @version v1.0
 8 
 9 */
10 
11 public class ArrayTool {
12 
13     //如果一个类中所有的方法都是静态的,需要再多做一步,私有构造方法,目的是不让其他类创建本类对象
14 
15     //直接用类名.调用即可
16 
17     /**
18 
19     私有构造方法
20 
21     */
22 
23     private ArrayTool(){} //设计模式:单例模式
24 
25     //1,获取最大值
26     
27     /**
28     这是获取数组中最大值的方法
29     @param arr 接收一个int类型数组
30     @return 返回数组中最大值
31     */
32     public static int getMax(int[] arr) {
33         int max = arr[0];                //记录第一个元素
34         for (int i = 1;i < arr.length ;i++ ) {    //从第二个元素开始遍历
35             if (max < arr[i]) {            //max与数组中其他的元素比较
36                 max = arr[i];            //记录住较大的
37             }
38         }
39     
40         return max;                    //将最大值返回
41     }
42     //2,数组的遍历
43     /**
44     这是遍历数组的方法
45     @param arr 接收一个int类型数组
46     */
47     public static void print(int[] arr) {
48         for (int i = 0;i < arr.length ;i++ ) {    //遍历数组
49             System.out.print(arr[i] + " ");
50         }
51     }
52     //3,数组的反转
53     /**
54     这是数组反转的方法
55     @param arr 接收一个int类型数组
56     */
57     public static void revArray(int[] arr) {
58         for (int i = 0;i < arr.length / 2 ;i++ ) {    
59                 //循环次数是元素个数的一半
60             /*
61             arr[0]与arr[arr.length-1-0]    交换
62             arr[1]与arr[arr.length-1-1]    交换
63             arr[2]与arr[arr.length-1-2] 交换
64             */
65             int temp = arr[i];
66             arr[i] = arr[arr.length-1-i];
67             arr[arr.length-1-i] = temp;
68         }
69     }
70 
71 }
72 
73 class Demo1_ArrayTool {
74 
75     public static void main(String[] args) {
76 
77         int[] arr = {33,11,22,66,55,44};
78 
79         /*ArrayTool at = new ArrayTool();
80 
81         int max = at.getMax(arr);                //获取最值
82 
83         System.out.println(max);        
84 
85         System.out.println("---------------");
86         at.print(arr);                            //打印
87         System.out.println();
88         System.out.println("---------------");
89         System.out.println("反转后:");
90         at.revArray(arr);                        //反转
91         at.print(arr);    */
92     
93         ArrayTool.print(arr);
94     }
95 
96 }
例子

 

Math.random()方法会生成大于等于0.0并且小于1.0的伪随机数

 1 class Demo2_Math {
 2 
 3     public static void main(String[] args) {
 4 
 5         //double d = Math.random();
 6 
 7         //System.out.println(d);        
 8 
 9         //Math.random()会生成大于等于0.0并且小于1.0的伪随机数
10         for (int i = 0;i < 10 ;i++ ) {
11             System.out.println(Math.random());
12         }
13     
14         //生成1-100的随机数
15         //Math.random()0.0000000 - 0.999999999
16         //Math.random() * 100 ====> 0.00000 - 99.999999999
17         //(int)(Math.random() * 100) ====> 0 - 99
18         //(int)(Math.random() * 100) + 1
19     
20         for (int i = 0;i < 10 ;i++ ) {
21             System.out.println((int)(Math.random() * 100) + 1);
22         }
23     }
24 
25 }
例子

 

posted @ 2019-05-23 16:11  白河ia  阅读(340)  评论(0编辑  收藏  举报