类里一些初始化顺序,是按定义的顺序来进行的,确切的说是变量定义的顺序,而构造器以及方法的调用都在这之后,小测试程序
MainClass.java
package Main; /** * Created by LiHui on 2015/5/1. */ import Pack1.*; public class MainClass { public static void main(String[] args){ MyClass2 mainclass = new MyClass2(); } }
MyClass1.java
package Pack1; /** * Created by LiHui on 2015/5/1. */ import Pack1.MyClass2; public class MyClass1 { public MyClass1(int num){ System.out.println("MyClass1(" + num + ")"); } }
MyClass2.java
package Pack1; /** * Created by LiHui on 2015/5/1. */ import Pack1.MyClass1; public class MyClass2 { MyClass1 m1 = new MyClass1(1); public MyClass2(){ System.out.println("MyClass2()"); m3 = new MyClass1(4); } MyClass1 m2 = new MyClass1(2); MyClass1 m3 = new MyClass1(3); }
这里new MyClass2,在类MyClass2里,先执行的是三个new,然后才是构造器MyClass2(),所以输出的结果为
MyClass1(1) MyClass1(2) MyClass1(3) MyClass2() MyClass1(4)
显然如果将m3 = new MyClass1(4);放到外面来,编译器肯定会报错的,这里是因为先执行的下面一个new m3,所以到了构造器里,m3再一次被初始化,此时就不需要指定类型