为什么我的班级没有加载

Vik*_*hra 5 java class classloader

我对以下代码的输出感到困惑.我知道第一个静态块在类加载后执行,但为什么我的类Test6没有被加载.有人可以澄清一下.

package com.vikash.General;

public class Test5 {

    public static void main(String[] args) {
        System.out.println(Test6.FOO);
    }
    static {
        System.out.println("Initializing B");
    }
}
class Test6{

    public static final String FOO = "foo";
    static {
        System.out.println("Initializing A");
    }
}
Run Code Online (Sandbox Code Playgroud)

Thi*_*ilo 9

Test6.FOO指的是Test6,但该字段是public static final String从编译时常量初始化的,因此它将由编译器内联,并且Test6根本不需要加载.

  • 如果您稍后将`Test6.FOO`更改为另一个字符串,则可能会出现问题.`Test5`仍将打印旧版本(除非你还重新编译`Test5`). (2认同)

Hel*_*ios 0

使用类加载器您将获得所需的输出

Class.forName("<package>.Test6");
Run Code Online (Sandbox Code Playgroud)