靜態代碼塊在類被加載時自動執行的理解

對靜態代碼塊執行時機的認識

  • 類的生命週期包括加載(Loading)、驗證(Verification)、準備(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)、卸載(Unloading)等七個階段,其中驗證、準備和解析三個部分統稱爲鏈接(Linking)。而類的加載指的就是從加載到初始化這五個階段。java

  • 初始化的時候會包含靜態代碼塊的執行和靜態變量的賦值code

  • 初始化在裝載時不是必須觸發的,保證在初次主動使用對象前會觸發。對象

  • 例:生命週期

    class A{
        static{
            System.out.print("1");
        }
        
        public A(){
            System.out.print("2");
        }
    }
    
    class B extends A{
        static{
            System.out.print("a");
        }
        
        public B(){
            System.out.print("b");
        }
    }
    
    
    public class Hello {
    
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        A ab = new B();
        ab = new B();
    }
    
    }

輸出結果: 1a2b2b虛擬機

靜態代碼塊和非靜態代碼塊的區別

  • 靜態代碼塊,在虛擬機加載類的時候就會加載執行,並且只執行一次;it

  • 非靜態代碼塊,在建立對象的時候(即new一個對象的時候)執行,每次建立對象都會執行一次io

相關文章
相關標籤/搜索