私たちは、オブジェクトが作成される前に、クラスには、静的要素(属性とメソッド)が含まれている場合、我々はまず、クラスをロードすることを知っているあなたは、オブジェクトを作成するために開始する前に、静的な要素をロードされます。あなたがブロックを定義する場合、よりオブジェクトコンストラクタが呼び出される作成するよりも何も、オブジェクトを作成する前に、ブロックは、静的修正静的なブロックがある場合、ブロックは最初に通常のブロックよりも、静的に実行されます、最初に実行されません。
オブジェクトの作成プロセスのが相続する前に、問題が複雑少しとなり、サブクラスのオブジェクトオブジェクトサブクラスのコンストラクタ呼び出しを作成するには、まず親クラスのコンストラクタを呼び出します。父だから類推サブクラスは、以前のロード。
Javaのクラスローディング機構は、私がここにいくつかの場所で作成するプロセスのオブジェクトを持って、実際には非常に複雑な問題で、まだ右ではなく、用語を理解する上で、この順番は基本的にパスについて話しています。
public class Animal {
public String test = "AnimalField";
public static String testStatic = "AnimalStaticField";
public Animal(){
System.out.println("我是animal中默认无参数的构造方法");
}
{
this.testAnimal();
System.out.println("我是animal中的普通程序块"+test);
}
static {
testStatic();
System.out.println("我是animal类中静态程序块"+testStatic);
}
public void testAnimal(){
System.out.println("我是animal类中的普通方法");
}
public static void testStatic() {
System.out.println("我是animal类中的静态方法");
}
}
public class Person extends Animal{
public String test = "personField";
public static String testStatic = "personStaticField";
public Person(){
System.out.println("我是person中默认无参数的构造方法");
}
{
this.testPerson();
System.out.println("我是person中的普通程序块"+test);
}
static {
testStatic();
System.out.println("我是person类中静态程序块"+testStatic);
}
public void testPerson(){
System.out.println("我是person类中的普通方法");
}
public static void testStatic() {
System.out.println("我是person类中的静态方法");
}
}
public class Test {
public static void main(String[] args) {
Person person = new Person();
}
}
出力:
結論Javaクラスの順序やオブジェクトの作成がロードされた:(最初の4つのステップでは、クラスのロード順です)
- ロードクラステンプレートの親クラス
- 親は(静的ブロックを実行するために、静的プロパティ、静的メソッド、静的ブロック)独自の静的空間を有することになります
- ロードクラステンプレートのサブクラス
- サブクラスは、(静的なブロックを実行するために、静的プロパティ、静的メソッド、静的ブロック、)独自の静的な空間を作り出します
- オープンスペースのオブジェクト
- 非静的メンバ(プロパティ、メソッド、ブロック、コンストラクタ)の親クラスをロードします
- ブロックは親を実行して、親クラスのコンストラクタメソッドが実行さ
- 非静的メンバロードサブクラス(属性、メソッド、ブロック、コンストラクタ)
- ブロック行うサブクラス、実行サブクラスコンストラクタメソッド
説明:
- クラステンプレート格納されている情報のみクラス(デフォルトのブロックが実行される)、実行されませんが、静的なスペースを生成するときに、静的なブロックが実行されます。
- 実際には、負荷への根本的な負荷は、実行が一様に実装されます。
java学习的小白一个,若写的有什么不对的地方,欢迎批评否证。