在类的内部,变量定义的先后顺序决定了初始化顺序,即使变量定义分散在方法定义之外,它们依旧会在任何方法(包括构造器)被调用之前得到初始化
其中初始化的顺序先是静态对象,其后是非静态对象
例如:
class Cat{ private Dog dog1=new Dog(1); static private Dog dog2=new Dog(2); public Cat(int n){ System.out.println("第"+n+"只猫"); }}class Dog{ public Dog(int n){ System.out.println("Dog("+n+")"); }}public class TestStatic { public static void main(String[] args) { System.out.println("test..."); Cat cat=new Cat(1); }}
运行结果:
test...Dog(2)Dog(1)第1只猫
cat类和dog类构造器中打印信息为了看初始化信息
在main方法中,创建了一个Cat类,除构造方法外,有两个对象,一个是静态dog,另外一个是dog,因为静态对象有先初始化,所以先打印出Dog(2),其后才是Dog(1)
最后才调用cat的构造方法,打印出cat(1)
非静态实例初始化
{}里初始化的内容在构造器之前执行,且每次生成该类{}将会重新被初始化