黑马程序员技术交流社区
标题:
关于代码块的使用
[打印本页]
作者:
didixyy
时间:
2015-10-6 16:07
标题:
关于代码块的使用
class top
{
static {
System.out.println("top的静态初始化块");
}
{
System.out.println("top的普通初始化块");
}
public top()
{
System.out.println("top的无参数初始化块");
}
}
class Mid extends top
{
static {
System.out.println("Mid的静态初始化块");
}
{
System.out.println("Mid的普通初始化块");
}
public Mid()
{
System.out.println("Mid的无参数构造器");
}
public Mid(String msg)
{
this();
System.out.println("Mid的带参数初构造器,参数:"+msg);
}
}
class low extends Mid
{
static {
System.out.println("low的静态初始化块");
}
{
System.out.println("low的普通初始化块");
}
public low()
{
super("我是参数");
System.out.println("执行low的无参数构造器");
}
}
public class TestDaiMaKuai {
public static void main(String[] args) {
new low();
new low();
}
}
复制代码
执行结果为
作者:
c4anger
时间:
2015-10-6 16:11
图片挂了……建议保存到本地再上传。
作者:
didixyy
时间:
2015-10-6 16:14
第一次创建low对象的时候,系统中部存在low类,所以需要先初始化并加载low类,初始化会从其类的顶层父类开始,先执行静态初始化块,按照顶层父类---父类---本类的顺序执行,但是一旦low类初始化后,该类会在虚拟机里一直存在,所以第2次执行 new low();的时候就没有再进行初始化了。
所以初始化块的顺序是,顶层父类静态初始化块>>>父类静态初始化块>>>本类静态初始化块>>>顶层父类普通初始化块>>>顶层父类构造器>>>父类普通初始化块>>>父类构造器>>>本类普通初始化块>>>本类构造器
作者:
didixyy
时间:
2015-10-6 16:16
挂了的图重新上传一下
QQ截图20151006160024.png
(152.66 KB, 下载次数: 4)
下载附件
2015-10-6 16:15 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2