以下代码为何无法通过编译?哪儿出错了?
应为定义了FOO的构造方法而不能运用系统的默认构造方法导致出错。
1.执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。
2.执行类的构造函数。
class Root
{
static{
System.out.println("Root的静态初始化块");
}
{
System.out.println("Root的普通初始化块");
}
public Root()
{
System.out.println("Root的无参数的构造器");
}
}
class MID extends Root
{
static{
System.out.println("MID的静态初始化块");
}
{
System.out.println("MID的普通初始化块");
}
public MID()
{
System.out.println("MID的无参数的构造器");
}
public MID(String msg)
{
//通过this调用同一类中重载的构造器
this();
System.out.println("MID的带参数构造器,其参数值:" + msg);
}
}
class Leaf extends MID
{
static{
System.out.println("Leaf的静态初始化块");
}
{
System.out.println("Leaf的普通初始化块");
}
public Leaf()
{
//通过super调用父类中有一个字符串参数的构造器
super("Java初始化顺序演示");
System.out.println("执行Leaf的构造器");
}
}
public class TestStaticInitializeBlock
{
public static voID main(String[] args)
{
new Leaf();
}
}
Root的静态初始化块
MID的静态初始化块
Leaf的静态初始化块
Root的普通初始化块
Root的无参数的构造器
MID的普通初始化块
MID的无参数的构造器
MID的带参数构造器,其参数值:Java初始化顺序演示
Leaf的普通初始化块
执行Leaf的构造器
1.静态初始化块只执行一次。
2.创建子类型的对象时,也会导致父类型的静态初始化块的执行。
@H_404_0@ 总结以上是内存溢出为你收集整理的动手动脑全部内容,希望文章能够帮你解决动手动脑所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)