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

JAVA的主类本身到底有没有被实例化?

JAVA的主类本身到底有没有被实例化?

红颜莎娜 2019-01-19 06:21:03
package staticSuper; class StaticSuper { static { System.out.println("super static block"); } StaticSuper(){ System.out.println("super constructor"); } } public class StaticTests extends StaticSuper { static { System.out.println("static block"); } StaticTests(){ System.out.println("main class"); } public static void main(String args[]) { System.out.println("in main"); } } 结果: super static blockstatic block 疑问:父类的static块的内容先于子类的static块的内容执行,感觉上就像是实例化子类时先实例化父类。可问题是两个类的构造函数中要求的输出统统都没有,因此引发了我的疑惑——第一,主类,就这里的staticTests到底有没有被实例化?能否用一个引用变量指向它?第二,如果被实例化了,为何能够绕过构造器?如果没有被实例化,那为什么运行了static中的内容?为什么父类中的static先于子类中的static?谢谢
查看完整描述

1 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

对象初始化过程:
(1) 主类的超类由高到低按顺序初始化静态成员
(2) 主类静态成员的初始化。
//创建实例时,如果不创建实例,则后面的不执行 ,你这了就没有创建实例
(3) 主类的超类由高到低进行默认构造方法的调用,在调用每一个超类的默认构造方法前,先对此超类进行非静态成员的初始化。
(4) 主类非静态成员的初始化。
(5) 主类的构造方法。

查看完整回答
反对 回复 2019-03-01
  • 1 回答
  • 0 关注
  • 576 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信