ホームページ  >  記事  >  Java  >  Java における親クラスとサブクラスのロード順序に関する簡単な説明

Java における親クラスとサブクラスのロード順序に関する簡単な説明

高洛峰
高洛峰オリジナル
2017-01-13 09:19:001411ブラウズ

class Parent {
   // 静态变量
   public static String p_StaticField = "父类--静态变量";
   // 变量(其实这用对象更好能体同这一点,如专门写一个类的实例)
  
   //如果这个变量放在初始化块的后面,是会报错的,因为你根本没有被初始化
   public String p_Field = "父类--变量";
   // 静态初始化块
   static {
       System.out.println(p_StaticField);
       System.out.println("父类--静态初始化块");
   }
   // 初始化块
   {
       System.out.println(p_Field);
       System.out.println("父类--初始化块");
   }
   // 构造器
   public Parent() {
       System.out.println("父类--构造器");
   }
}
public class SubClass extends Parent {
   // 静态变量
   public static String s_StaticField = "子类--静态变量";
   // 变量
   public String s_Field = "子类--变量";
   // 静态初始化块
   static {
       System.out.println(s_StaticField);
       System.out.println("子类--静态初始化块");
   }
   // 初始化块
   {
       System.out.println(s_Field);
       System.out.println("子类--初始化块");
   }
   // 构造器
   public SubClass() {
       //super();
       System.out.println("子类--构造器");
   }
   // 程序入口
   public static void main(String[] args) {
       System.out.println("*************in main***************");
       new SubClass();
       System.out.println("*************second subClass***************");
       new SubClass();
   }
}

出力結果
親クラス-静的変数
親クラス-静的初期化ブロック
サブクラス-静的変数
サブクラス-静的初期化ブロック
*************** **メイン内******************
親クラス--変数
親クラス--初期化ブロック
親クラス--コンストラクター
サブクラス--変数
サブクラス--初期化ブロック
サブクラス--Constructor
******************2番目のサブクラス*******************
親クラス- -変数
親クラス--初期化ブロック
親クラス--コンストラクター
サブクラス--変数
サブクラス--初期化ブロック
サブクラス--コンストラクター

結果分析:
明らかに、メインメソッドをロードした後、静的変数は親クラスまたはサブクラスのすべてが実行され、その後に親クラスとサブクラスの通常の変数とコンストラクターが存在します。これは、サブクラスのオブジェクトを作成する場合、このクラスには親クラスが必要であることがわかり、親クラスの .class をロードし、その通常の変数と初期化コード ブロックを順番に初期化し、最後にそのコンストラクターを使用すると、サブクラスの作業を開始できます。サブクラスの .class をロードし、サブクラスの作業を実行します。

さらに、Java では、サブクラスに super() というデフォルトのコンストラクターが存在します。デフォルトのコンストラクターしかない場合は、親クラスでコメントアウトして実験を行うことができます。サブクラスに super(argument) が追加されていない場合、Main メソッドの内容をすべてコメントアウトすると、

Parent のみが出力されることがわかります。クラス - 統計変数親クラス - 統計初期化ブロックサブクラス - 静的変数からのみの静的変数からのみ}それ以外の場合、静的変数静的変数
。理由? Java の親クラスとサブクラスのロード順序の詳細な説明については、PHP 中国語 Web サイトの関連記事に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。