問題の説明:
Javaはクラスをインスタンス化します。このクラスにコンストラクターだけでなく、コードブロック、静的コードブロック、および適切に初期化された別のクラスのインスタンスがある場合、コードの実行順序はどのようになりますか?
サンプルと実行結果
人々のクラス
package Extends;
import Dog.Dog;
class people {
public int age=100;
public String name;
Dog dog=new Dog();
public people() {
System.out.println("people");
}
{
System.out.println("people的代码块");
}
static {
System.out.println("people中的静态代码块");
}
}
犬のクラス
public class Dog {
String name;
int age;
public Dog(){
name="大黄";
age=3;
System.out.println("dog的初始化");
}
}
メイン機能
public class Main {
public static void main(String[] args) {
people p1=new people();
System.out.println("---------");
people p2=new people();
}
}
原因分析:
ここで、peopleクラスには、コードブロック、静的コードブロック、構築メソッドがあるだけでなく、その場で犬のインスタンスを初期化することもあります。結果から、静的コードブロックの実行は常に最も早いが実行されると、次のレベルは次のとおりです。インプレース初期化とコードブロック。2つを書き込む人は誰でも最初を実行し、最後は構築方法です。
import Dog.Dog;
class people {
public int age=100;
public String name;
public people() {
System.out.println("people");
}
{
System.out.println("people的代码块");
}
static {
System.out.println("people中的静态代码块");
}
Dog dog=new Dog();
}
現時点では、dogの構築はコードブロックの後にあります。