一、基础概念
静态关键字 static 是成员修饰符,直接用于修饰成员。
(一)特点:
1.被静态修饰的成果,可以直接被类名所调用。
2.静态成员优先于对象存在。
3.静态成员随着类的加载而加载。随着类的消失而消失。静态成员的生命周期很长。
(二)注意事项:
1.静态方法只能访问静态成员,不能访问非静态成员。
2.静态方法中不能出现this或者super关键字。
3.主函数是静态的。
(三)什么时候用:
1.成员变量:如果数据在所有对象中都是一样的。直接用静态修饰。
2.成员函数:如果函数没有访问过对象中的属性数据,那么该函数就是静态的。
(四)成员变量和静态变量的区别:
1.名称:成员变量也叫实例变量。静态变量也叫类变量。
2.内存存储:成员变量存储到堆内存的对象中。静态变量存储到方法区的静态区中。
3.生命周期:成员变量随着对象的出现而出现,随着对象的消失而消失。静态变量随着类的加载而加载。随着类的消失而消失。
(五)静态代码块:
1.随着类的加载而执行,而且只执行一次。
2.给类进行初始化。
3.类不需要创建对象,但是需要初始化。这是将部分代码存储到静态代码块中。
二、实例代码
1 classPerson2 {3 privateString name;4 private intage;5 static String country = "CN";//定义静态变量country
6
7 Person(String name,intage)8 {9 this.name =name;10 this.age =age;11 }12 public voidshow()13 {14 System.out.println("name="+name+",age"+age);15 }16 //既然sleep函数没有访问到对象中的属性,可以用static修饰该方法。(节约内存的使用)
17 public static voidsleep()18 {19 System.out.println("sleep......");20
21 }22
23 static//静态代码块
24 {25 System.out.println("static......");26 }27
28 static voidshow1()29 {30 System.out.println(country);//直接访问静态变量
31 }32 static voidshow2()33 {34 System.out.println(Person.country);//通过类名的方式访问静态变量
35 }36
37 }38
39 classStaticDemo40 {41 public static voidmain(String[] args)42 {43 Person p = new Person("xiaoming",20);44 Person.sleep();//通过类名的方式调用静态sleep函数
45 Person.sleep();46 System.out.println(Person.country);//通过类名访问,输出静态变量country的值
47 Person.show1();48 Person.show2();49 }50 }
三、代码运行