クラスのロードに関する変な面接問題

3726 ワード

クラスのロードに関する変な面接問題
無駄話は言わないで、下のコードを見てください。普通のコードの中にあります。以下のような場合には、クラスローディングがトリガされます。1.クラス名.静的変数2.クラス名.forName 3.クラス名.クラス名.クラストリガクラスローディングの場合は、まず静的コードブロックの内容を実行します。コードステートメントを実行します。
class A{
    public static int value = 134;
    static{
        System.out.println("A");
    }
}

class B extends  A{
    static{
        System.out.println("B");
    }
}

public class Demo {
   public static void main(String args[]){
       int s = B.value;
       System.out.println(s);
   }
}
B.valueはBクラスのロードをトリガするべきです。結果はA 134が実際に測定した結果、スポンサーを驚かせました。結果はA 134がコードを見てみると、B.valueの中のvalue変数はAクラスです。したがって、ここでは大胆に推測して、クラス名.変数のロード時には変数のクラスだけをロードします。次はテストをします。
class A{
    public static int valueA = 134;
    static{
        System.out.println("A");
    }
}

class B extends  A{
    public static int valueB = 245;
    static{
        System.out.println("B");
    }
}

public class Demo {
   public static void main(String args[]){
       int s = B.valueB;
       System.out.println(s);
   }
}
得られたのはA B 245の経験証で、予測データが得られました。