Earth类是在什么时候进行加载的,

Earth类是在什么时候进行加载的,

private static Earth earth = new Earth(),  还有这句是什么时候加载的,debug了一下好像这句是在私有构造语句之后执行的,不是先实例化然后才能再执行私有构造里的语句吗。。。。。。。有点搞不明白语句的执行顺序了。

正在回答

登陆购买课程后可参与讨论,去登陆

4回答

同学你好,静态属性和静态方法在类加载时随之加载,但是加载并不等于执行,静态方法是在调用时执行。

以同学的代码为例,Earth e1 = Earth.getEarth();执行时,加载Earth类,加载静态属性,静态方法。加载静态属性时,执行了私有构造方法,在私有构造方法中输出了“地球诞生”。如:

http://img1.sycdn.imooc.com//climg/5ec0dbc10932966604600308.jpg

Earth.getEarth()是加载静态方法,执行该方法,输出“我先加载??”.

祝:学习愉快~

  • 慕粉3827918 提问者 #1
    好的老师 我以为加载=执行┭┮﹏┭┮
    2020-05-18 10:14:17
好帮手慕阿满 2020-05-17 12:07:16

同学你好,当执行Earth e1 = Earth.getEarth()这句代码时,加载并初始化Earth类。

祝:学习愉快~

  • 提问者 慕粉3827918 #1
    老师,我看到其他回答中,老师说在类加载的时候静态方法或属性等随之加载。 但是我在Earth类中的静态方法中加入了一条输出打印语句,运行时静态方法并不是先加载的 这是怎么回事呢 public class Earth { //定义私有构造方法,并在构造方法中打印输出“地球诞生” private Earth() { System.out.println("地球诞生"); } //定义私有静态类对象并完成实例化 private static Earth earth = new Earth(); //定义公有静态方法返回类内的私有静态对象 public static Earth getEarth() { System.out.println("我先加载??"); return earth; } }
    2020-05-17 12:14:09
好帮手慕小尤 2020-05-16 15:50:18

同学你好,苍星乱舞同学回答是正确的。初始化顺序依次是:(静态变量、静态初始化块)–>(变量、初始化块)–> 构造器。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 慕粉3827918 #1
    Earth e1 = Earth.getEarth() 是在这句执行之后开始加载Earth类的吗
    2020-05-17 10:49:13
苍星乱舞 2020-05-16 12:00:29

当然是静态代码先执行啦

你都可以直接使用  Earth.earth来直接调用这个属性(访问修饰符需要是public)

在这时你的对象还没创建呢

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师