如下面试题结果是啥?
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的引用了。
