1. 程式人生 > >靜態內部類的一些認識---->單例模式

靜態內部類的一些認識---->單例模式

question 1類載入的時候,其靜態內部類是否被載入?

public class SingleDemo {
	public static void main(String[] args) {

		CEO ceo=new CEO();
	}
}
class CEO {
	{
		System.out.println("@@");
	}
	static class InnerClass{
		static{
			System.out.println("!!");
		}
	}
	
}
執行結果:


所以,載入一個類的時候其靜態內部類(包括內部類)不會被載入。因為一個類被載入,當且僅當某個靜態成員(靜態域、構造器、靜態方法等)被呼叫時發生。

根據內部類不會在外部類載入的時候同時被載入這一特性,引出單例模式的另一種實現方式:

public class SingleDemo {
	public static void main(String[] args) {
		CEO ceo=CEO.getInstance();
		CEO ceo1=CEO.getInstance();
		System.out.println(ceo);
		System.out.println(ceo1);
	}
}
class CEO {
	private CEO(){
		System.out.println("@@");
	}
	public static CEO getInstance(){
		return InnerClass.INSTANCE;
		
	}
	 static class InnerClass{
		public static final CEO INSTANCE=new CEO();
		static{
			System.out.println("InnerClass");
		}
	}
	
}
執行結果:


由此可以看出:雖然呼叫了兩次getInstance(),但最終生成了一個例項,並且內部類只加載了一次

由於內部靜態類只會被載入一次,故該實現方式時執行緒安全