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
**/
总结:先父后子,先静后动,最后执行构造,一个类的静态代码快仅在加载时执行一次…