父子类的静态代码块 构造函数

public class ParentStatic {

	private int x=3;
	private String y ="3";
	public  ParentStatic() {
		System.out.println("这是父类的空参构造函数");
	}
	public ParentStatic(int x,String y) {
		System.out.println("这是父类的有参构造函数"+x+y);
	}
	
	{
		System.out.println("这是父类的非静态代码快");
	}
	static {
		System.out.println("这是父类的静态代码快");
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
       ChildA a = new ChildA();
	}

}
class ChildA extends ParentStatic{
	private int x =6 ;
	private int y =4;
	public ChildA(){
		System.out.println("这是子类的空参构造函数");
	}
	public ChildA(int t,int c) {
	    //这里默认隐藏了一条语句 super();
		System.out.println("这是子类的有参构造函数:"+t+c);
	}
	{
		System.out.println("这是子类的非静态代码块");
	}
    static {
    	System.out.println("这是子类的静态代码块");
    }
}
/*
*这是父类的静态代码快
*这是子类的静态代码块
*这是父类的非静态代码快
*这是父类的空参构造函数
*这是子类的非静态代码块
*这是子类的空参构造函数
*/
//当使用有参构造函数实例化对象时的结果
ChildA b = new ChildA(2, 5);
/**
这是父类的静态代码快
这是子类的静态代码块
这是父类的非静态代码快
这是父类的空参构造函数
这是子类的非静态代码块
这是子类的有参构造函数:25
**/
//当创建两个对象时:
       ChildA a = new ChildA();
       ChildA b = new ChildA(2, 5);
/** 结果如下
这是父类的静态代码快
这是子类的静态代码块
这是父类的非静态代码快
这是父类的空参构造函数
这是子类的非静态代码块
这是子类的空参构造函数
------------静态代码块只在第一次new执行一次,之后不再执行,而非静态代码块在每new一次就执行一次。-------------------------------------------------------------
这是父类的非静态代码快
这是父类的空参构造函数
这是子类的非静态代码块
这是子类的有参构造函数:25
**/

总结:先父后子,先静后动,最后执行构造,一个类的静态代码快仅在加载时执行一次…

猜你喜欢

转载自blog.csdn.net/Lining_s/article/details/79732049