class Root
{
Static
{
System.out.printIn("Root的静态初始化块");
}
{
System.out.printIn("Root的普通初始化块");
}
public Root
{
System.out.printIn("Root的无参数构造器");
}
}
class Mid extends Root
{
static
{
System.out.printIn("Mid 的静态初始化块");
}
{
System.out.printIn("Mid 的普通初始化块");
}
public Mid()
{
System.out.printIn("Mid 的无参数的构造器");
}
public Mid(String msg)
{
//通过this调用同一类中重载的构造器
this();
System.out.printIn("Mid 的带参数的构造器,其参数值:"+msg);
}
}
class Leaf extends Mid
{
static
{
System.out.printIn("Leaf 的静态初始化块")
}
{
System.out.printIn("Leaf 的普通初始化块");
}
public Leaf()
{
//通过super调用父类中有一个字符串参数的构造器
super("权威指南")
System.out.printIn("执行Leaf的构造器");
}
}
public class Test
{
public static void main(String[] args)
{
new Leaf();
new Leaf();
}
}
执行结果:
Root的静态初始化块
Mid的静态初始化块
Leaf的静态初始化块
Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:权威指南
Leaf的普通初始化块
执行Leaf的构造器
Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:权威指南
Leaf的普通初始化块
执行Leaf的构造器
创建了两次Leaf对象。第一次创建一个Leaf对象时,因为系统还不存在Leaf类,因此需要先加载并初始化Leaf类,一旦Leaf类初始化成功后,Leaf类在该虚拟机里巷一直存在,因此当第二次创建Leaf实例时无须再次对Leaf类进行初始化。
分享到:
2012-01-11 11:00
浏览 3452
评论