参考链接:https://www.cnblogs.com/dolphin0520/p/3799052.html
被static修饰的变量和方法不依赖对象来进行访问,只要类被加载了,就可通过类名直接访问。
static属于类,可修饰类的成员变量,类方法。
static修饰的属性在内存中只有一份,而其它属性则是每个对象。
静态方法
静态方法不能使用非静态方法和非静态成员变量。因为非静态方法和非静态成员变量依赖具体的对象。
但是非静态方法可以访问静态方法和静态成员变量。
静态变量
静态变量被所有对象共享,在内存中只有一个副本,而且它仅在类初次加载时初始化。而非静态变量是对象拥有的,在对象创建的时候被初始化,各个对象存在独有的副本且互不影响。
static代码块
static代码块可放在类中的任何位置,每个类可有多个static代码快。类加载时按照static的顺序初始化每个static代码块,且只会执行一次。
static可以优化性能。
class Person{
private Date birthDate;
public Person(Date birthDate) {
this.birthDate = birthDate;
}
boolean isBornBoomer() {
// startDate, endDate是固定值,每次调用该方法都会创建该对象,浪费空间性能。
Date startDate = Date.valueOf("1946");
Date endDate = Date.valueOf("1964");
return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;
}
}
class Person{
private Date birthDate;
private static Date startDate,endDate;
static{
startDate = Date.valueOf("1946");
endDate = Date.valueOf("1964");
}
public Person(Date birthDate) {
this.birthDate = birthDate;
}
boolean isBornBoomer() {
return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;
}
}