码迷,mamicode.com
首页 > 其他好文 > 详细

朝花夕拾——你了解构造器初始化顺序吗?

时间:2015-07-28 18:36:41      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:java   构造器   继承   初始化   

在java程序中,创建java对象,其初始化顺序总是先调用最顶层父类的初始化操作,包括初始化块和构造器,然后再向下调用其他类的初始化操作。

类和实例的初始化顺序可以参考

朝花夕拾——看清java实例变量的初始化内幕

朝花夕拾——再看java类变量的初始化内幕

先看看代码例子

package java_zhaohuaxishi;

class GrandFather{
	
	{
		System.out.println("GrandFather--非静态代码块");
	}
	
	public GrandFather(){
		System.out.println("GrandFather--无参构造器");
	}
	
	public GrandFather(String name){
		this();
		System.out.println("GrandFather--有参构造器"+"名字:"+name);
	}
}

class Father extends GrandFather{
	
	{
		System.out.println("Father--非静态代码块");
	}
	
	
	public Father(){
		System.out.println("Father--无参构造器");
	}
	
	public Father(String name){		
		super(name);
		System.out.println("Father--有参构造器"+"名字:"+name);
	}
	
}

class Son extends Father{
	
	{
		System.out.println("Son--非静态代码块");
	}
	
	
	public Son(){
		super("向上");
		System.out.println("Son--无惨构造器");
	}

	public Son(String name) {
		this();
		System.out.println("Son--有参构造器"+"名字:"+name);
	}
	
}

public class ConstructorTest {
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Son("小明");

	}

}
程序运行结果如下

GrandFather--非静态代码块
GrandFather--无参构造器
GrandFather--有参构造器名字:向上
Father--非静态代码块
Father--有参构造器名字:向上
Son--非静态代码块
Son--无惨构造器
Son--有参构造器名字:小明

从上述结果看到,构造器的初始化过程实际上会根据具体调用this或者super的方法来进行,是一个递归操作。

构造器使用super显式调用的是父类的构造器,再根据具体的参数执行父类的具体构造器;而this也是显示调用本类的构造器,也会根据参数来执行。

然而,当子类构造器中没有显示使用super和this的话,则会在子类构造器执行之前隐式调用父类无参构造器。

我把上述代码中

	public Son(){
		//super("向上");
		System.out.println("Son--无惨构造器");
	}
super带参调用注释掉,则输出结果如下:

GrandFather--非静态代码块
GrandFather--无参构造器
Father--非静态代码块
Father--无参构造器
Son--非静态代码块
Son--无惨构造器
Son--有参构造器名字:小明
值得注意的是:super和this的调用必须作为构造器第一行代码,且最多只能选其中一种来进行调用。






版权声明:本文为博主原创文章,未经博主允许不得转载。

朝花夕拾——你了解构造器初始化顺序吗?

标签:java   构造器   继承   初始化   

原文地址:http://blog.csdn.net/u010794180/article/details/47108233

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!