静态属性——>静态代码块——>普通属性——>普通代码块——>构造方法
代码:
package top.simba1949;
/**
* @author [email protected]
* @date 2018/8/1 15:46
*
* JAVA 中单个类的初始化顺序
*
* JAVA 类中包含以下几项:
* 静态属性:static 修饰
* 静态代码块:static {}
* 普通属性:
* 普通方法块:{}
* 构造方法:
* 普通方法
*/
public class JavaLoadOrder {
/**
* 静态属性:static 修饰
*/
private static String staticField = getStaticFieldValue();
static String getStaticFieldValue(){
System.out.println("静态属性初始化");
return "静态属性";
}
/**
* 普通属性:
*/
private String field = getFieldValue();
String getFieldValue(){
System.out.println("普通属性初始化");
return "普通属性";
}
/**
* 静态代码块:static {}
*/
static {
System.out.println("静态代码块");
}
/**
* 普通方法块:{}
*/
{
System.out.println("普通代码块");
}
public JavaLoadOrder() {
System.out.println("构造方法");
}
public void method(){
System.out.println("普通方法");
}
public static void main(String[] args) {
new JavaLoadOrder();
}
}
结果如图:
父类静态属性——>父类静态代码块——>子类静态属性——>子类静态代码块
——>父类普通属性——>父类普通代码块——>父类构造方法
——>子类普通属性——>子类普通代码块——>子类构造方法
代码:
子类代码
package top.simba1949;
/**
* @author [email protected]
* @date 2018/8/1 16:10
* JAVA 类中包含以下几项:
* 静态属性:static 修饰
* 静态代码块:static {}
* 普通属性:
* 普通方法块:{}
* 构造方法:
* 普通方法
*/
public class JavaLoadOrderExtendClass extends JavaLoadOrderParentClass{
private static String staticField = getStaticFieldValue();
private static String getStaticFieldValue() {
System.out.println("静态属性");
return "静态属性";
}
private String field = getFieldValue();
private String getFieldValue() {
System.out.println("普通属性");
return "普通属性";
}
static {
System.out.println("静态代码块");
}
{
System.out.println("普通代码块");
}
public JavaLoadOrderExtendClass() {
super();
System.out.println("构造方法");
}
public static void main(String[] args) {
new JavaLoadOrderExtendClass();
}
}
父类代码
package top.simba1949;
/**
* @author [email protected]
* @date 2018/8/1 16:11
*/
public class JavaLoadOrderParentClass {
private static String classStaticField = getClassStaticFieldValue();
private static String getClassStaticFieldValue() {
System.out.println("父类 静态属性");
return "父类 静态属性";
}
private String field = getClassFieldValue();
private String getClassFieldValue() {
System.out.println("父类 普通属性");
return "父类 普通属性";
}
static {
System.out.println("父类 静态代码块");
}
{
System.out.println("父类 普通代码块");
}
public JavaLoadOrderParentClass() {
System.out.println("父类 构造方法");
}
}
结果如图:
类的加载顺序
1、静态代码块/静态成员
静态代码块/静态成员最先加载。