User Tools

Site Tools


java:object-creation-order

创建顺序2

如果只有一个类,它不继承任何人。 执行结果

C....执行子类静态代码段
========================
C....执行子类非静态代码段
C....子类构造器
C....Child public 方法
C....c1 =C....初始化子类静态属性
C....c2 =C....初始化子类实例属性
C....Child private 方法
C....c1 =C....初始化子类静态属性
C....c2 =C....初始化子类实例属性
child is com.pinganfu.pinganfuweb.web.controller.merchant.ObjectCreationOrderChildTest@24c21495

对象创建时的执行顺序

Run 子类的main函数 得到的结果:

P....初始化父类静态属性
P....执行父类静态代码段
C....初始化子类静态属性
C....执行子类静态代码段
========================
P....初始化父类实例属性
P....执行父类非静态代码段
P....父类构造器
C....Child public 方法
C....c1 =1000
C....c2 =0
P....Parent private 方法
P....p1 =100
P....p2 =200
C....初始化子类实例属性
C....执行子类非静态代码段
C....子类构造器
C....Child public 方法
C....c1 =1000
C....c2 =2000
C....Child private 方法
C....c1 =1000
C....c2 =2000
child is ObjectCreationOrderChildTest@5f186fab
ObjectCreationOrderParentTest.java
public class ObjectCreationOrderParentTest {
 
    private static int p1 = staticPrintInt("P....初始化父类静态属性", 100);
    private int p2 = instancePrintInt("P....初始化父类实例属性", 200);
 
    static{
     System.out.println("P....执行父类静态代码段");
    }
 
    {
     System.out.println("P....执行父类非静态代码段");
    }
 
    public static int staticPrintInt(String str, int value){
     System.out.println(str);
     return value;
    }
 
    public int instancePrintInt(String str, int value){
     System.out.println(str);
     return value;
    }
 
    public void publicPrintProperty(){
     System.out.println("P....Parent public 方法");
     System.out.println("P....p1 =" + p1);
     System.out.println("P....p2 =" + p2);
    }
 
    private void privatePrintProperty(){
     System.out.println("P....Parent private 方法");
     System.out.println("P....p1 =" + p1);
     System.out.println("P....p2 =" + p2);
    }
 
    public ObjectCreationOrderParentTest(){
     System.out.println("P....父类构造器");
     publicPrintProperty();
     privatePrintProperty();
    }
 
    public static void main(String[] args){
        ObjectCreationOrderParentTest p;
     System.out.println("========================");
     p = new ObjectCreationOrderParentTest();
 
     System.out.println("Parent is" + p.toString());
    }
}
ObjectCreationOrderChildTest.java
public class ObjectCreationOrderChildTest extends ObjectCreationOrderParentTest {
 
    private static int c1 = staticPrintInt("C....初始化子类静态属性", 1000);
    private int c2 = instancePrintInt("C....初始化子类实例属性", 2000);
 
    static{
     System.out.println("C....执行子类静态代码段");
    }
 
    {
     System.out.println("C....执行子类非静态代码段");
    }
 
    public void publicPrintProperty(){
     System.out.println("C....Child public 方法");
     System.out.println("C....c1 =" + c1);
     System.out.println("C....c2 =" + c2);
    }
 
    private void privatePrintProperty(){
     System.out.println("C....Child private 方法");
     System.out.println("C....c1 =" + c1);
     System.out.println("C....c2 =" + c2);
    }
 
    public ObjectCreationOrderChildTest(){
     System.out.println("C....子类构造器");
     publicPrintProperty();
     privatePrintProperty();
    }
 
    public static void main(String[] args){
     ObjectCreationOrderChildTest c;
     System.out.println("========================");
     c = new ObjectCreationOrderChildTest();
 
     System.out.println("child is " + c.toString());
    }
}
java/object-creation-order.txt · Last modified: 2018/07/24 08:13 by 127.0.0.1

Except where otherwise noted, content on this wiki is licensed under the following license: 沪ICP备12046235号-2
Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki