Java笔记——Java代码块的执行顺序,
分享于 点击 25357 次 点评:233
Java笔记——Java代码块的执行顺序,
Java代码块的执行顺序
Java程序中代码块的执行顺序对于学习Java的人来说是必不可少需要掌握的。
代码块
在Java中,使用{}括起来的代码被称为代码块。
根据其位置和声明的不同,可以分为:
- 局部代码块
- 构造代码块
- 静态代码块
执行顺序
首先执行静态代码块
接着执行构造代码块
最后指向构造方法
静态代码块 >>> 构造代码块 >>>> 构造方法
考虑Java中关于继承的情况,这子类和父类的执行顺序稍有变化:
当一个类被JVM装载后各种代码块的执行顺序大致如下:
这里的执行顺序同子类构造中有一个默认的父类构造super()无关,不是执行到隐藏的super()才开始初始化父类的,类的初始化是分层初始化,即先初始化父类,再初始化子类,初始化每个类的过程中,进行类的初始化工作,先进行成员变量的初始化,成员变量的初始化顺序是:默认初始化,即int为0这种->显示初始化,例如给int型显示初始化了值->构造方法初始化,所以是这里执行到了构造方法。
但是一定要注意,父类初始化选择的构造方法却和子类中super 选择的构造相关,下面代码很好的解释了这点。
测试代码
package com.chen;
public class People {
{
System.out.println("父类构造代码块");
}
static {
System.out.println("父类静态代码块");
}
public People() {
System.out.println("父类构造代码块");
}
public People(String str){
System.out.println("父类含参构造方法");
}
}
package com.chen;
public class Student extends People{
{
System.out.println("子类构造代码块");
}
static {
System.out.println("子类静态代码块");
}
public Student() {
//super(null);
System.out.println("子类构造代码块");
}
public static void main(String[] args) {
new Student();
}
}
执行结果为:
父类静态代码块
子类静态代码块
父类构造代码块
父类构造代码块
子类构造代码块
子类构造代码块
注:
如果取消 super(null); 的注释,那么执行结果会发生变化,在选择父类的构造方法的时候会选择含参构造方法,执行结果为:
父类静态代码块
子类静态代码块
父类构造代码块
父类含参构造方法
子类构造代码块
子类构造代码块
相关文章
- 暂无相关文章
用户点评