- 修饰类变量,类方法,被修饰的变量和方法被所有类实例共享,属于类,而非实例。可以通过类名调用
- 静态代码块,静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法),不管创建多少实例,静态代码块只执行一次。
- static inner class, 非静态内部类会维护一个指向外部类的引用,静态内部类没有,创建不依赖于外部类,不能使用外围类的任何非静态成员及方法
- 静态导入包,
import static
public class Singleton {
//声明为 private 避免调用默认构造方法创建对象
private Singleton() {
}
// 声明为 private 表明静态内部该类只能在该 Singleton 类中被访问
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getUniqueInstance() {
return SingletonHolder.INSTANCE;
}
}
how to ensure static variable thread safe