Java基础22-Static关键字
1.static关键字
1 public class Test{
2 public static void main(String[] args){
3 Persion p1=new Persion();
4 Persion p2=new Persion();
5 p1.name="小明";
6 p1.country="中国";
7 p1.age=20;
8 p2.name="小花";
9 p2.age=15;
10
11 System.out.println(p1);
12 System.out.println(p2);
13 System.out.println(Persion.country);
14 //用类直接可以调用静态方法
15 Student.print();
16
17
18 }
19 }
20 /*
21 static关键字
22 作用:是一个修饰符,用于修饰成员(成员变量,成员方法)
23 1.被static修饰后的成员变量只有一份
24 2.当成员被static修饰之后,多了一种访问方式,除了可以对象调用之外,还可以被类直接调用(类名.静态成员)
25
26 static的特点:
27 1.随着类的加载而被加载
28 2.优先于对象的存在
29 3.被所有的对象所共享的
30 4.可以直接被类名所调用
31
32 存放位置:
33 类变量随着类的加载而存在于data内存区
34 实例变量随着对象的建立而存在于堆内存
35
36 生命周期:
37 1.类变量生命周期最长,随着类的消失而消失
38 2.实例变量生命比类变量短,它是随着对象的消失而消失
39
40 方法注意事项:
41 1.静态的方法只能访问静态的成员
42 2.非静态的方法既能访问静态的成员(成员变量,成员方法)也能访问非静态成员
43 3.静态的方法中是不可以定义this super关键字
44 因为静态优先于对象存在,所以静态方法不可以出现this
45 */
46
47 class Persion{
48 String name;
49 int age;//实例变量
50 static String country;//静态变量(类变量)
51
52 public String toString(){
53 return "姓名:"+name+"\n"+"年龄:"+age+"\n"+"国家:"+country;
54 }
55 }
56
57 class Student{
58 String name;
59 static String country;
60 static void print(){//此方法没有访问非静态成员,那这个功能就可以定义为静态的
61 System.out.println(country);
62 }
63 void p(){
64 System.out.println(country);
65 }
66 }
2.什么时候使用静态
从两方面入手:
什么时候使用静态的成员变量?
当属于同一个类的所有对象出现共享数据时,需要将存储这个共享数据的成员变量用static修饰
什么时候使用静态方法?
当功能(方法)内部没有访问到非静态的成员时(对象特有的数据),那么该功能可以定义成静态的
3.练习 静态工具类
/*
静态应用工具类
每一个应用程序都有共性的功能
可以将这些功能进行抽取、独立封装,以使复用
对象的作用:对象是用来封装数据的,只要这个类里面有非静态的成员时,那对象就必须存在
*/
public class Test{
public static void main(String[] args){
int[] arr={232,43,535,343,23,43,3,4};
System.out.println(Compare.max(arr));//使用类名直接调用静态方法
}
}
public class Compare{
private Compare(){//构造方法私有,无法再创建对象
}
public static int max(int[] arr){//静态方法
int max=arr[0];
for(int i=0;i<arr.length;i++){
if(arr[i]>max){
max=arr[i];
}
}
return max;
}
}