JAva-クラスの初期化順序

3025 ワード

  • クラスの初期化プロセスとクラスのインスタンス化プロセス
  • クラスの初期化とクラスのインスタンス化は2つの全く異なる概念
  • である.
  • クラスの初期化とは、クラスロード中の初期化段階がクラス変数をプログラム猿の意図に従って付与するプロセスを指す.
  • クラスのインスタンス化とは、クラスがメモリに完全にロードされた後にオブジェクトを作成するプロセスです.
  • クラスのインスタンスを作成するには、まずクラスをメモリにロードして初期化する必要があります.すなわち、クラスの初期化操作はクラスインスタンス化操作の前に行われますが、クラスの初期化操作が終了するまでクラスインスタンス化操作
  • が行われないという意味ではありません.
    public class Father {
        private static String aa = aa();
        private String bb = bb();
        static {
            System.out.println("       ");
        }
        {
            System.out.println("        ");
        }
        public Father() {
            System.out.println("     ");
        }
        private static String cc = cc();
        private String dd = dd();
        private static String aa(){
            System.out.println("      aa");
            return "";
        }
        private String bb(){
            System.out.println("      bb");
            return "";
        }
        private static String cc(){
            System.out.println("      cc");
            return "";
        }
        private String dd(){
            System.out.println("      dd");
            return "";
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Father father = new Father();
        }
    }
    =====    main  =====
          aa
           
          cc
          bb
            
          dd
         
    =====    main  ===== 
    
      :(     )
    1、        ,       、     ,        、      ,       
    2、                         
    
    public class Son extends Father{
        private static String aa = aa();
        private String bb = bb();
        static {
            System.out.println("       ");
        }
        {
            System.out.println("        ");
        }
        public Son() {
            System.out.println("     ");
        }
        private static String cc = cc();
        private String dd = dd();
        private static String aa(){
            System.out.println("      aa");
            return "";
        }
        private String bb(){
            System.out.println("      bb");
            return "";
        }
        private static String cc(){
            System.out.println("      cc");
            return "";
        }
        private String dd(){
            System.out.println("      dd");
            return "";
        }
    }
    
    public class Main {
        public static void main(String[] args) {
    //        Father father = new Father();
            Son son = new Son();
        }
    }
    =====    main  =====
          aa
           
          cc
          aa
           
          cc
          bb
            
          dd
         
          bb
            
          dd
         
    =====    main  ===== 
    
      :(     )
    1、        ,         、     ,          、     ,           、      ,      ,       。
    2、                         
    

     
  • 総じて、クラスインスタンス化の一般的なプロセスは、
  • である.
  • 親クラスのクラスコンストラクタ()->子クラスのクラスコンストラクタ()->親クラスのメンバー変数とインスタンスコードブロック->親クラスのコンストラクタ->子クラスのメンバー変数とインスタンスコードブロック->子クラスのコンストラクタ.

  • 参照先:
    https://blog.csdn.net/justloveyou_/article/details/72466416
    https://blog.csdn.net/justloveyou_/article/details/72466105