Java虚拟机类加载机制

mac2025-10-28  18

如下面试题结果是啥?

public class SuperClass { static { System.out.println("SuperClass static init"); } public static String ABC = "abc"; } public class SubClass extends SuperClass{ static { System.out.println("SubClass static init"); } } public class Main { public static void main(String[] args) { System.out.println(SubClass.ABC); } }

结果如下:

SuperClass static init abc

如下面试题结果是啥?

public class SuperClass { static { System.out.println("SuperClass static init"); } public static final String ABC = "abc"; } public class SubClass extends SuperClass{ static { System.out.println("SubClass static init"); } } public class Main { public static void main(String[] args) { System.out.println(SubClass.ABC); } }

结果如下

abc

两个程序为啥结果不一样?

第二个程序静态变量使用final 修饰,常量在编译阶段会存入调用类的常量池中,也就是说Main类对SubClass.ABC的引用已经与SuperClass无关了,实际上已经转行为Main类对ABC的引用了。

最新回复(0)