规则:
1.静态代码块,静态变量,属于类,类加载就调用
2.非静态代码块,非静态变量,对象创建的时候调用
3.永远是静态先调用,并且整个程序生命周期中,只会调用一次
4.在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象
5.静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生。
6.静态函数,主动调用才会执行
顺序:
1.执行父类的静态代码块和静态变量初始化,从上到下的顺序
2.执行子类的静态代码块和静态变量初始化
3.执行父类的非静态代码块和非静态变量初始化
4.执行父类的构造函数
5.执行子类的非静态代码块和非静态变量初始化
6.执行子类的构造函数
给所有静态变量分配内存,从上到下
然后回去初始化所有静态变量
public static Test2 t1 = new Test2();
static {
System.out.println("static1");
}
public static Test2 t2 = new Test2();
{
System.out.println("code");
}
static {
System.out.println("static2");
}
结果是:
code
static1
code
static2