靜態內部類的一些認識---->單例模式
阿新 • • 發佈:2018-12-26
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(),但最終生成了一個例項,並且內部類只加載了一次
由於內部靜態類只會被載入一次,故該實現方式時執行緒安全的