java继承中new子类对象的执行顺序

来源:互联网 发布:mac桌面不见了 编辑:程序博客网 时间:2024/06/05 10:49

java创建对象的几种方式:

(1) 用new语句创建对象,这是最常见的创建对象的方法。
(2) 运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。
(3) 调用对象的clone()方法。
(4) 运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。


下面测试代码块,静态代码块,构造器的初始化顺序

public class TestExtends {

public static void main(String[] args) {
A a = new A(5);
/*输出结果:
* B constructor
A.draw(), radius = 0
A constructor
A.draw(), radius = 5


* */
Son s = new Son();
/*输出结果:
* parent中static初始化块
son中的static初始化块
parent中的初始化块
parent构造方法
son中的初始化块
son构造方法


* */
}
}
class B {
private int radius = 10;
public void draw() {
System.out.println("B.draw(), radius = " + radius);
}
public B() {
System.out.println("B constructor");
draw();
}
}
class A extends B {
private int radius = 1;
public void draw() {
System.out.println("A.draw(), radius = " + radius);
}
public A(int radius) {
this.radius = radius;
System.out.println("A constructor");
System.out.println("A.draw(), radius = " + radius);
}
}
class Parent{  
 
    {  
        System.out.println("parent中的初始化块");  
    }  
    static{  
        System.out.println("parent中static初始化块");  
    }  
      
    public Parent(){  
        System.out.println("parent构造方法");  
    }  
}  
  
class Son extends Parent{  
    {  
        System.out.println("son中的初始化块");  
    }  
      
    static{  
        System.out.println("son中的static初始化块");  
    }  
      
    public Son(){  
        System.out.println("son构造方法");  
    }  
      
}  
1 0