解决方案 »
- 问个神奇的问题,重写了hashCode和equals,为什么Set还能添加重复的
- 求人改下代码关于非静态变量的,就一两句。
- 数据结构作业
- The project: Test which is referenced by the classpath, does not exist.
- java.util里面的Calendar
- String疑问??默认赋值与new String()赋值效果为什么不一样啊?
- String类型字符串是不是有长度限制,为什么我赋给一个很长的字符串时,输出即只有一半
- 有人看过RSSOwl的源代码么,请教一个问题
- 一个绝对非常有趣的问题,看谁能解答出来
- 小弟是新来的菜鸟,散点分请各位以后多多帮忙,重谢第一个进来恭贺开张的
- 局域网循环广播一个文件,要求逐行广播
- 请问直接打印一个对象是什么意思?谢谢
②调用构造器之前,类加载器要从硬盘中把Test2类加载到内存中
③因为Test2是Test的子类,所以也要把Test类加载进来,并且顺序是Test类->Test2类
④Test类加载之后,首先处理Test类的静态成员。此例中表现为静态成员赋值,并且会调用静态方法getA();(此时输出第一个数3)以及执行静态代码块(第二个数1)。如果是静态代码块前,属性在后,那就先执行静态代码块,再是属性a赋值。
⑤之后是Test2类,同理。(第三个数6,第四个数4)
⑥Test2类以及Test类加载完毕后,开始执行Test2的构造器,进入Test2构造器后,先调用父类Test类的构造器Test();(输出2)
⑦Test2构造器是默认构造器,调用父类构造器之后调用完毕。程序结束。
我的理解是这样的,楼主。
我把你的代码在itbegin平台上运行了。
为什么是这个结果:
有几个原则:
1.当创建对象之前,需要加载类文件,在加载的过程中,如遇到static的代码(变量、代码块)都会被初始化。而且只初始化一次且只有一次。
1.当创建对象时,一定是先创建父类再创建子类。也就是先调用父类的构造方法再调用子类的构造方法。