java 中類的加載順序


1、虛擬機在首次加載Java類時,會對靜態初始化塊、靜態成員變量、靜態方法進行一次初始化
 2、只有在調用new方法時才會創建類的實例
 3、類實例創建過程:按照父子繼承關系進行初始化,首先執行父類的初始化塊部分,然后是父類的構造方法;再執行本類繼承的子類的初始化塊,最后是子類的構造方法
 4、類實例銷毀時候,首先銷毀子類部分,再銷毀父類部分

public class Parent
{
    public static int t = parentStaticMethod2();
    {
        System.out.println("父類非靜態初始化塊");
    }
    static
    {
        System.out.println("父類靜態初始化塊");
    }
    public Parent()
    {
        System.out.println("父類的構造方法");
    }
    public static int parentStaticMethod()
    {
        System.out.println("父類類的靜態方法");
        return 10;
    }
    public static int parentStaticMethod2()
    {
        System.out.println("父類的靜態方法2");
        return 9;
    }
  
    @Override
    protected void finalize() throws Throwable
    {
        // TODO Auto-generated method stub
        super.finalize();
        System.out.println("銷毀父類");
    }
    
}
public class Child extends Parent
{
    {
        System.out.println("子類非靜態初始化塊");
    }
    static
    {
        System.out.println("子類靜態初始化塊");
    }
    public Child()
    {
        System.out.println("子類的構造方法");
    }
    public static int childStaticMethod()
    {
        System.out.println("子類的靜態方法");
        return 1000;
    }
    @Override
    protected void finalize() throws Throwable
    {
        // TODO Auto-generated method stub
        super.finalize();
        System.out.println("銷毀子類");
    }
}
public class Test
{
   
    public static void main(String[] args)
    {
        // TODO Auto-generated method stub
        Parent.parentStaticMethod();
//        Child child = new Child();
        
    }

}

輸出

父類的靜態方法2
父類靜態初始化塊
父類類的靜態方法

類中static 方法在第一次調用時加載,類中static成員按在類中出現的順序加載。當調用靜態方法2時輸出

父類的靜態方法2
父類靜態初始化塊
父類的靜態方法2

注釋掉Parent.parentStaticMethod();

去掉注釋Child child = new Child();

父類的靜態方法2
父類靜態初始化塊
子類靜態初始化塊
父類非靜態初始化塊
父類的構造方法
子類非靜態初始化塊
子類的構造方法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM