java实例初始化顺序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
java实例初始化顺序
package com.jvm.init;
/**
* @author JTY
* @date 21-2-21 0:37
* @description 类的初始化过程
* 1. ⽗类默认初始值 0 或null (jvm 中类构造器<clinit>()⽅法)
* 2. ⼦类默认初始值 0 或null (jvm 中类构造器<clinit>()⽅法)
* 3. ⽗类静态字段初始化
* 4. 静态代码块初始化先⽗类再⼦类
* 5. ⼦类静态字段初始化
* 6. 普通字段(有赋值操作)初始化
* 7. 构造⽅法初始化先⽗类再⼦类 (jvm 中实例构造器<init>()⽅法)
*/
public class ClassInitOrder {
static class Father {
private String three = "3";
private static String one = "1";
public static String five = "5";
public Father() {
System.out.println("Father::" + three);
System.out.println("Father::" + "4");
//验证⼦类静态字段初始化在⽗类构造⽅法前执⾏
showFive();
}
static {
//验证⼦类中获取到的值为此处赋值的值
five = "6";
System.out.println("Father::" + one);
System.out.println("Father::" + "2");
System.out.println("Father::" + five);
}
public void showFive() {
}
;
}
static class Son extends Father {
private String three = "3";
private static String one = "1";
//验证⼦类字段初始化在⽗类静态块之后执⾏,赋值为6,在⽗类构造⽅法前执⾏,可通过动态分派访问该值确定已赋值为6 private static String five_5 = five;
public Son() {
System.out.println("Son::" + three);
System.out.println("Son::" + "4");
}
static {
System.out.println("Son::" + one);
System.out.println("Son::" + "2");
System.out.println("Son::" + five_5);
}
public void showFive() {
System.out.println("son::" + five_5);
}
;
}
public static void main(String[] args) {
/***
* 输出
----------
Father::1
Father::2 ⽗类静态块
Father::6
Son::1 ⼦类静态块
Son::2
Son::6
----------
Father::3 ⽗类构造⽅法
Father::4
son::6
----------
Son::3 ⼦类构造⽅法 Son::4
----------
*/
Son s = new Son();
}
}。