java SE类初始化过程学习记录

java SE类初始化过程学习记录

父类代码:

package lxb.test;

public class Super {

public static int i = 1;
public int j = 2;

static{
    System.out.println("父类静态代码块执行i:" + i);
}

{
    System.out.println("父类构造代码块执行i:" + i);
    System.out.println("父类构造代码块执行j:" + j);
}

public Super() {
    run();
    System.out.println("父类构造函数执行i:" + i);
    System.out.println("父类构造函数执行j:" + j);
}

public void run() {
    System.out.println("run方法执行j:" + j);
}

}

子类代码:

package lxb.test;

public class Children extends Super {

public static void main(String[] args) {
    Children children = new Children();
}

public static int i = 11;
public int j = 12;

static{
    System.out.println("子类静态代码块执行i=" + i);
}

{
    System.out.println("子类构造代码块执行i=" + i);
    System.out.println("子类构造代码块执行j=" + j);
}

public Children(int a){
    super();
    System.out.println("子类调用有参构造函数执行i=" + i);
    System.out.println("子类调用有参构造函数执行j=" + j);
}

public Children() {

    //子类构造函数调用其他子类构造函数时,必须在第一行。
    //但是其调用的最后一个构造函数的第一行必须是父类构造函数
    this(i);

    System.out.println("子类构造函数执行i=" + i);
    System.out.println("子类构造函数执行j=" + j);
}

public void run() {
    System.out.println("子类run方法执行i=" + i);
    System.out.println("子类run方法执行j=" + j);
}

}

运行结果和分析:

父类静态代码块执行i:1 //父类静态变量和静态代码块先初始化

子类静态代码块执行i=11 //子类静态变量和静态代码块初始化

                 //子类非静态变量声明,默认值为0

父类构造代码块执行i:1
父类构造代码块执行j:2 //父类构造代码块执行

子类run方法执行i=11 //父类构造函数开始执行,调用被子类覆盖的run方法
子类run方法执行j=0 //子类声明的默认值为0的非静态变量

父类构造函数执行i:1
父类构造函数执行j:2 //父类构造函数执行

               //子类声明的非静态变量开始赋值

子类构造代码块执行i=11 //构造代码块执行,子类声明的非静态变量赋值成功
子类构造代码块执行j=12

子类调用有参构造函数执行i=11
子类调用有参构造函数执行j=12 //子类中被调用的构造函数执行

子类构造函数执行i=11
子类构造函数执行j=12 //最后执行子类构造函数,完成对象的初始化

总结

对于对象初始化这部分内容是javaSE的基础,之前看过《java编程思想》里面有这方面的介绍,不过都是局限于看和理解,今天遇到这方面的内容,自己亲自动手写代码实践了一下,对象初始化过程终于整理清楚了。代码核心就是在父类构造函数中调用run方法,可以把构造过程中的细节展现出来,想出这个方法的人真的很聪明。
另外,纸上得来终觉浅,绝知此事要躬行。多写代码,多实践才能不断的进步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值