コードブロック静的コードブロックは、コンストラクターの実行順序をインプレースで初期化します

問題の説明:

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の構築はコードブロックの後にあります。

おすすめ

転載: blog.csdn.net/weixin_45070922/article/details/112991240