1.java基础题目
1.1类的加载顺序题目
package com.newbe.t2;
/*
* 测试单个类的执行顺序(静态代码块,非静态代码块,静态成员,成员变量,构造函数)
* 总结单个类的执行顺序:
* 1.先初始化静态成员变量(按照静态成员变量的顺序执行)
* 2.执行静态代码块,只在第一次new执行一次,之后不再执行,而非静态代码块在每new一次就执行一次。
* 3.执行mian方法(按照一般顺序执行)
* 4.初始化成员变量
* 5.非静态代码块
* 6.执行构造函数
* 7.回到main方法,执行main方法其他的语句
* 简单来说:
* 静态变量 > 静态初始块 > main方法(按顺序执行) > 成员变量 > 非静态初始块 > 构造器
*/
public class ClassInitOrderTest {
//静态变量
public static String staticField = "static field";//1.先执行静态成员变量的初始化
//静态代码块
static { //2.执行静态代码块
System.out.println(staticField);
System.out.println("static block");
}
//成员变量
private String field = "member field";//4.初始化成员变量,
//普通代码块
{ //5.执行非静态代码块
System.out.println(field);
System.out.println("non-static block");
}
//构造函数
public ClassInitOrderTest() { //6.执行构造方法
System.out.println("constructor");
}
//main方法
public static void main(String[] args) {
System.out.println("start---------");//3.执行完静态代码块后,执行mian方法
new ClassInitOrderTest();//4.执行实例化
//new ClassInitOrderTest();
System.out.println("end---------");//7.执行完构造方法回到正常的执行顺序结束
}
}
/*
只执行一个 new ClassInitOrderTest()结果:
static field
static block
start---------
member field
non-static block
constructor
end---------
*/
/*
执行两个 new ClassInitOrderTest()结果:
static block
start---------
member field
non-static block
constructor
member field
non-static block
constructor
end---------
*/