猿问
如何理解:在父类中如果有常量属性,在子类中使用常量属性时是不会进行父类的类加载。
是不是因为父类编译时会生成常量,而子类在使用时已经有常量了,不需要再对父类进行加载。
喵喔喔
浏览 626
回答 3
3回答
浮云间
在加载子类时候,父类是一定会被加载的。在JVM 的加载顺序中,必然是先加载父类,然后才是子类的初始化。没记错的话顺序是 父类的静态变量 -- 父类的静态代码块 -- 子类的静态变量 -- 子类的静态代码块。 顺序可能有记错。
0
0
0
开心每一天1111
加载子类会先加载父类我写了代码下面:Superpublic class Super{ public static final int FIELD = 1; public static int FILED1 = 2; static { System.out.println("Super"); }}Subpublic class Sub extends Super{ static { System.out.println("out main"); } public static void main(String[] args) { System.out.println(FIELD); System.out.println(FILED1); }}输出是:Superout main12会加载父类,你说的问题是什么样的?
0
0
0
HUH函数
补充:public class Demo { public static void main(String[] args) { System.out.println(Child.const_str); System.out.println(Child.const_str_child); }}class Parent{ public static final String const_str = "P"; static{ System.out.println("P Init"); }}class Child extends Parent{ public static final String const_str_child = "C"; static { System.out.println("C Init"); }}运行结果:PC注意:public class Demo { public static void main(String[] args) { System.out.println(Child.const_str); System.out.println(Child.const_str_child); }}class Parent{ public static String const_str = "P"; static{ System.out.println("P Init"); }}class Child extends Parent{ public static String const_str_child = "C"; static { System.out.println("C Init"); }}常量中final去掉,则结果:P InitPC InitCjdk1.8之所以会出现这种情况是因为final由于其不变性,在编译时进行优化,System.out.println(Child.const_str)编译后直接指向该字符串在常量池中的位置。
0
0
0
随时随地看视频
慕课网APP
相关分类
Java
我要回答