动手动脑

动手动脑,第1张

概述 以下代码为何无法通过编译?哪儿出错了?    应为定义了FOO的构造方法而不能运用系统的默认构造方法导致出错。             1.执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。 2.执行类的构造函数。 class Root { static{ System.out.println("Root的静态初始化块"); } { System.out.prin @H_404_0@ @H_404_0@

 以下代码为何无法通过编译?哪儿出错了?

 

 应为定义了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@ 总结

以上是内存溢出为你收集整理的动手动脑全部内容,希望文章能够帮你解决动手动脑所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1023444.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存