类内代码执行顺序:
静态块 -> main() -> 非静态快(成员变量) -> 构造方法
- 静态块在类加载时执行,且执行顺序与声明顺序相同
- 静态代码块只在第一次new执行一次,之后不再执行;而非静态代码块在每new一次就执行一次
- 如果成员变量为其他类的对象,则成员变量的初始化和非静态块的执行顺序与二者的声明顺序一致
示例代码
TempClass 将作为成员变量
public class TempClass {
public TempClass(){
System.out.println("TempClass init");
}
}
StaticClass 包含静态块、非静态块、TempClass对象、静态方法
public class StaticClass {
public static void print(){
System.out.println("static func");
}
public TempClass tc = new TempClass();
{
System.out.println("dynamic block");
}
static{
System.out.println("static block");
}
public StaticClass(){
System.out.println("StaticClass init");
}
}
main方法
public static void main(String[] args) throws IOException{
System.out.println("input:");
int a = System.in.read();
StaticClass sc = new StaticClass();
System.out.println("------------------");
System.out.println("input again:");
int b = System.in.read();
StaticClass.print();
}
执行结果
input:
1
static block //step 1 静态块
TempClass init //step 2 成员变量初始化
dynamic block //step 3 非静态块
StaticClass init //step 4 构造函数
------------------
input again:
static func //step 5 调用静态方法