博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA 实例对象创建后的初始化过程
阅读量:2495 次
发布时间:2019-05-11

本文共 1896 字,大约阅读时间需要 6 分钟。

1.结论

0.首先静态变量初始化和静态代码块初始化按照编码顺序来执行,(jvm加载类时初始化阶段)

1.然后实例变量初始化和普通代码块初始化按照编码顺序来执行
2.最后调用构造函数初始化

实例化一个类的对象的过程是一个典型的递归过程:

首先实例化Object类,再依次对以下各类进行实例化,直到完成对目标类的实例化。

如果子类重写了父类的方法,父类构造函数中使用的便是子类重写的方法

2.实验源码

// 父类class Foo {
static {
System.out.println("父类第一个静态代码块"); } static int fj = 88; {
i = 99; // 代码块可以赋值其后定义的实例变量,但不能访问其后定义的实例变量 System.out.println("父类第一个构造代码块"); } int i = 1; static {
System.out.println("子类静态代码块"+ "fj=" + fj); } public Foo() {
i = getValue();// 父类调用子类的重写getValue()方法,而子类的变量j为0(因为jvm仅对内存空间进行过初始化) System.out.println("父构造函数初始化后:" + "i=" + i); } {
System.out.println("父实例变量初始化后:" + "i=" + i); i = 2; System.out.println("父代码块初始化后:" + "i=" + i); } protected int getValue() {
System.out.println("父类的getValue:i=" + i); return i; }}// 子类class Bar extends Foo {
static {
System.out.println("子类第一个静态代码块"); } static int sj = 66; {
System.out.println(""); System.out.println("子类第一个构造代码块"); } int j = 3; static {
System.out.println("子类静态代码块" + "sj=" + sj); } public Bar() {
j = 4; System.out.println("子构造函数初始化后:" + "j=" + j); } {
System.out.println("子实例变量初始化后:" + "j=" + j); j = 5; System.out.println("子代码块初始化后:" + "j=" + j); } @Override protected int getValue() {
System.out.println("调用子类重写的getValue:j=" + j); return j; }}public class OrderTest {
public static void main(String... args) {
Bar bar = new Bar(); System.out.println("子类getValue返回值:" + bar.getValue()); }}/*输出:父类第一个静态代码块子类静态代码块fj=88子类第一个静态代码块子类静态代码块sj=66父类第一个构造代码块父实例变量初始化后:i=1父代码块初始化后:i=2调用子类重写的getValue:j=0父构造函数初始化后:i=0子类第一个构造代码块子实例变量初始化后:j=3子代码块初始化后:j=5子构造函数初始化后:j=4调用子类重写的getValue:j=4子类getValue返回值:4*/

转载地址:http://uzerb.baihongyu.com/

你可能感兴趣的文章
设计模式04_抽象工厂
查看>>
设计模式05_单例
查看>>
设计模式06_原型
查看>>
设计模式07_建造者
查看>>
设计模式08_适配器
查看>>
设计模式09_代理模式
查看>>
设计模式10_桥接
查看>>
设计模式11_装饰器
查看>>
设计模式12_外观模式
查看>>
设计模式13_享元模式
查看>>
设计模式14_组合结构
查看>>
设计模式15_模板
查看>>
海龟交易法则01_玩风险的交易者
查看>>
CTA策略02_boll
查看>>
vnpy通过jqdatasdk初始化实时数据及历史数据下载
查看>>
设计模式19_状态
查看>>
设计模式20_观察者
查看>>
vnpy学习10_常见坑02
查看>>
用时三个月,终于把所有的Python库全部整理了!拿去别客气!
查看>>
pd.stats.ols.MovingOLS以及替代
查看>>