加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

动手动脑

发布时间:2020-12-14 00:28:11 所属栏目:Linux 来源:网络整理
导读:?以下代码为何无法通过编译?哪儿出错了? ? ?应为定义了FOO的构造方法而不能运用系统的默认构造方法导致出错。 ? ? ? ? ? ? 1.执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。 2.执行类的构造函数。 class Root { sta

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

?

?应为定义了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.创建子类型的对象时,也会导致父类型的静态初始化块的执行。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读