大体上顺序是这样的:(也可以说是优先级,同一级的按顺序执行)
1 静态变量,静态代码块
2 实例变量,实例代码块
3 构造函数
public class Test{
public Test(){
System.out.println("构造方法被执行 5");
}
{
System.out.println("实例代码块被执行 3"); //实例代码块
}
private TestInstance ti = new TestInstance(); //实例变量
private static TestInstance ti1 = new TestInstance(1); //静态变量
static{
System.out.println("静态代码块被执行 2"); //静态代码块
}
public static void main(String[] args){
new Test();
}
}
class TestInstance{
public TestInstance(){
System.out.println("实例变量被构造 4");
}
public TestInstance(int i){
System.out.println("静态变量被构造 1");
}
}
执行顺序是: 1 2 3 4 5
另外有一点还要特别注意:在执行构造函数时,实例变量和实例代码块 会先被执行。
在附上一个把我引到这个问题的例子:
package com.wind.jdbc;正确顺序应该是: 1 2 3 4
public class TestStaticCode {
private static TestStaticCode tsc = new TestStaticCode();
static{
System.out.println("4");
}
private InstanceVariable iv = new InstanceVariable();
private TestStaticCode(){
System.out.println("3");
}
public static void main(String[] args){
}
}
package com.wind.jdbc;
public class InstanceVariable {
static{
System.out.println("1");
}
public InstanceVariable(){
System.out.println("2");
}
}