java有参无参构造器的的执行顺序

这里拿了用数组构造栈的一段代码说明一下

 1 public class StackArray<E> {
 2 
 3     private Object[] data = null;
 4     private int maxSize; //栈容量
 5     private int top = -1; //栈顶指针
 6     
 7     /**
 8      * 重写无参构造函数
 9      */
10     StackArray(){
11         this(10); //默认栈大小为10 (如果这行前面有代码,这行就会报错)
12         System.out.println("无参构造器执行");
13     }
14     
15     /**
16      * 有参构造函数
17      */
18     StackArray(int initialSize){
19         if(initialSize >= 0){
20             this.maxSize = initialSize;
21             data = new Object[initialSize];
22             top = -1;
23         }else{
24             throw new RuntimeException("初始化大小不能小于0:" + initialSize);
25         }
26         System.out.println("有参构造器执行");
27     }
28     
29     public static void main(String[] args) {
30         new StackArray();
31         //new StackArray(20);
32     }
33 }

1)new StackArray()即无参的实例化过程:

找到无参构造器 >  初始化成员变量(引用类型初始化为null,int初始化为0) > this(10)调用有参构造器 > 来到有参构造器并初始化赋值形参(initialSize=10)> 成员变量赋值(例如top=-1)> 执行有参构造器内部代码(输出了“有参构造器执行”)> 执行无参构造器内部代码(输出了“无参构造器执行”)> 结束

2)new StackArray(20)有参的实例化过程:

找到有参构造器 > 初始化赋值形参并初始化成员变量(引用类型初始化为null,int初始化为0) >   成员变量赋值(例如top=-1)> 执行有参构造器内部的代码 > 结束

3)如果无参构造器内没有调用有参构造器,new StackArray()的实例化过程:

找到无参构造器 >  初始化成员变量(引用类型初始化为null,int初始化为0) > 成员变量赋值(例如top=-1)> 执行无参构造器内部代码(输出了“无参构造器执行”)> 结束

原文地址:https://www.cnblogs.com/xdyixia/p/9180612.html