这个父类没有任何具体的引用,应该是成为垃圾了吧。lz再看这段代码class X { Y b = new Y(); X() { System.out.println("X"); } }class Y { Y() { System.out.println("Y"); } }public class Test extends X { Y y = new Y(); Test() { System.out.println("Z"); } public static void main(String[] args) { new Test(); } }
看了一些以前的相关文章。现在已经明白了,哈哈。 我总结了一下: 1.装载、静态初始化。从main()开始,先是装载器启动,它会搜索关键字"extends",从下到上把相关的类都装载。然后从root base class开始静态初始化。 2.继续main(). 3.instance变量(实例变量)初始化总是先于构造方法的。若main()中实例化对象,那么从root base class开始初始化instance变量,执行构造方法。最后到main()所在类初始化instance变量,执行构造方法。 4.继续main().
{
Y b = new Y(); X()
{
System.out.println("X");
}
}class Y
{
Y()
{
System.out.println("Y");
}
}public class Test extends X
{
Y y = new Y(); Test()
{
System.out.println("Z");
} public static void main(String[] args)
{
new Test();
}
}
我总结了一下:
1.装载、静态初始化。从main()开始,先是装载器启动,它会搜索关键字"extends",从下到上把相关的类都装载。然后从root base class开始静态初始化。
2.继续main().
3.instance变量(实例变量)初始化总是先于构造方法的。若main()中实例化对象,那么从root base class开始初始化instance变量,执行构造方法。最后到main()所在类初始化instance变量,执行构造方法。
4.继续main().