为了账号安全,请及时绑定邮箱和手机立即绑定

如何理解:在父类中如果有常量属性,在子类中使用常量属性时是不会进行父类的类加载。

如何理解:在父类中如果有常量属性,在子类中使用常量属性时是不会进行父类的类加载。

喵喔喔 2019-03-21 18:19:45
是不是因为父类编译时会生成常量,而子类在使用时已经有常量了,不需要再对父类进行加载。
查看完整描述

3 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

在加载子类时候,父类是一定会被加载的。
在JVM 的加载顺序中,必然是先加载父类,然后才是子类的初始化。

没记错的话顺序是 父类的静态变量 -- 父类的静态代码块 -- 子类的静态变量 -- 子类的静态代码块。 顺序可能有记错。


查看完整回答
反对 回复 2019-04-17
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

加载子类会先加载父类

我写了代码下面:

Super


public class Super

{

    public static final int FIELD = 1;


    public static int FILED1 = 2;


    static {

        System.out.println("Super");

    }

}

Sub


public class Sub extends Super

{

    static {

        System.out.println("out main");

    }

    public static void main(String[] args)

    {

        System.out.println(FIELD);

        System.out.println(FILED1);

    }

}

输出是:


Super


out main

1

2


会加载父类,你说的问题是什么样的?


查看完整回答
反对 回复 2019-04-17
?
HUH函数

TA贡献1836条经验 获得超4个赞

补充:


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");

    }

}

运行结果:


P

C

注意:


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 Init

P

C Init

C

jdk1.8

之所以会出现这种情况是因为final由于其不变性,在编译时进行优化,System.out.println(Child.const_str)编译后直接指向该字符串在常量池中的位置。


查看完整回答
反对 回复 2019-04-17
  • 3 回答
  • 0 关注
  • 625 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号