代码
public class Singleton {
private Singleton() {
System.out.println("single");
}
private static class Inner {
private static Singleton s = new Singleton();
}
public static Singleton getSingle() {
return Inner.s;
}
public static void main(String[] args) {
Thread[] ths = new Thread[200];
for(int i=0; i<ths.length; i++) {
ths[i] = new Thread(()->{
System.out.println(Singleton.getSingle());
});
}
Arrays.asList(ths).forEach(o->o.start());
}
}
为什么
- Java程序的初始化顺序依次是:
父类静态变量-->父类静态代码块-->子类静态变量-->子类静态代码块-->父类非静态变量-->父类非静态代码块-->父类构造函数-->子类非静态变量-->子类非静态代码块-->子类构造函数
- static 关键字:
一句话描述就是:方便在没有创建对象的情况下进行调用(方法/变量) ,(此处要区分对象和类的区别)
显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。
- 用静态的内部类实现单例模式的原理:
静态内部类可以不依赖外部类的实例而被实例化。
网友评论