类初始化顺序

类里一些初始化顺序,是按定义的顺序来进行的,确切的说是变量定义的顺序,而构造器以及方法的调用都在这之后,小测试程序

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再一次被初始化,此时就不需要指定类型

发表回复