static
定义
static是一个修饰符,代表的是静态的意思,它可以修饰成员变量和成员方法,不能修饰构造方法
特点:
(1)被static所修饰的成员是随着字节码文件对象的加载而加载,所以是优先于对象存在于内存中的
(2)被static所修饰的成员被该类下所有的对象所共享
(3)被static所修饰的成员可以通过类名,直接调用 eg:Person.country
类名.属性名();
类名.方法名();
静态成员被放在方法区里,属于共用属性
注意事项:
(1) 静态方法中不能有this关键字,也不能使用super方法
(2) 静态方法中可以调用静态成员变量和静态成员方法,但是不可以调用非静态的成员变量和非静态的成员方法
个人理解:因为静态方法和静态成员不在对象里,和成员变量以及成员方法不在一个空间里。
(3) 非静态方法中可以调用静态的成员变量和静态的成员方法,也可以调用非静态的成员变量和非静态的成员方法
个人理解:静态方法加在在对象创建之前,对象在使用他们时可以找得到它们,不过用的是利用类名寻找
(4) static存在并发问题
(5) static在Java程序结束前会一直存在于内存中,故尽量少使用static
class Pig{
String name;
static int age;
public static void eat(){
drink();// 实际逻辑:Pig.drink();
// this.sleep(); // 编译报错,非静态方法
System.out.println(age); // 实际逻辑: Pig.age
// System.out.println(this.name); // 编译报错,非静态属性
}
public static void drink(){}
public static void sleep(){}
public void allInfomat (){
drink();// 实际逻辑:Pig.drink();
this.sleep();
System.out.println(age); // 实际逻辑: Pig.age
System.out.println(this.name);
}
}