黑马程序员技术交流社区
标题: 对象初始化流程,看蒙了。 [打印本页]
作者: 牧歌 时间: 2014-12-17 22:52
标题: 对象初始化流程,看蒙了。
/**
*基类包含一静态变量、包含一实例变量
*包含一个静态初始化块以及一个构造子
*/
class Base{
public staticint a = 10;
public int b = 20;
static
{
System.out.println("StaticInit Base " + a);
//System.out.println("NullInit " + b);
}
public Base()
{
System.out.println("Init Base" + this.b);
}
}
/**
*一级子类和基类包含的内容一样
**/
class SuperClass extends Base{
public staticint a1 = getSuperStaticNumber();
public int b1 = getSuperInstanceNumber();
public SuperClass()
{
System.out.println("InitSuperClass" + this.b1);
}
static
{
System.out.println("StaticInit SuperClass" + a1);
}
public staticint getSuperStaticNumber()
{
System.out.println("Staticmember init");
return 100;
}
public int getSuperInstanceNumber()
{
System.out.println("Instancemember init");
return 200;
}
}
/**
*二级子类为测试该代码的驱动类
*/
public class SubClass extends SuperClass{
public staticint a2 = getStaticNumber();
public int b2 = getInstanceNumber();
public SubClass()
{
System.out.println("InitSubClass " + this.b2);
}
public staticint getStaticNumber()
{
System.out.println("Staticmember init Sub");
return 1000;
}
public int getInstanceNumber()
{
System.out.println("Instancemember init Sub");
return 2000;
}
public static void main(String args[])
{
new SubClass();
}
static
{
System.out.println("StaticInit " + a2);
}
}
这段代码会有以下输出:
Static InitBase 10
Staticmember init
Static InitSuperClass 100
Staticmember init Sub
Static Init1000
Init Base20
Instancemember init
InitSuperClass 200
Instancemember init Sub
InitSubClass 2000
感觉好复杂啊。。。
作者: 王海生 时间: 2014-12-17 23:41
同学笔记做得挺认真啊,赞扬一下.
作者: 牧歌 时间: 2014-12-17 23:43
谢谢。。
作者: 探寻者 时间: 2014-12-17 23:58
看了好半天原来是子父类的调用,只有一点感悟:子类中所有的构造函数都会默认访问父类中空参数的构造函数,然后看程序就容易多了。。。补充一句,笔记很详细:loveliness:
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |