java中的执行顺序_java中代码执行顺序

静态代码块 -- >构造代码块 --> 构造方法

静态代码块:只执行一次

构造代码块:每次调用构造方法都执行

http://blog.csdn.net/wuhaiwei002/article/details/55226155

JAVA是一门面向对象的编程语言,这里考虑“类”里面在程序开始执行时的执行顺序。

先看一个实例:

class Person{

static {

System.out.println("执行Person静态代码块");

}

{

System.out.println("执行Person构造代码块");

}

public Person(){

System.out.println("执行Person无参构造方法");

}

public Person(String name){

System.out.println("执行Person构造方法"+ name);

}

}

class Student extends Person{

static {

System.out.println("执行Student静态代码块");

}

{

System.out.println("执行Student构造代码块");

}

public Student(String name){

super(name);

System.out.println("执行Student构造方法" + name);

}

public Student(){

super();

System.out.println("执行Student无参构造方法");

}

}

public class ExtendsStaticConstruct {

public static void main(String args[]){

Student student1 = new Student("lili");

System.out.println("--------------------");

Student student2 = new Student();

}

}

执行结果:

4d3f6906ca65988a77a66f0d7dedc436.png

说明:

一般的类里面包含:

1、静态代码块(静态区、静态变量等)

2、构造代码块({ }中间的内容)

3、构造方法

其执行顺序也是1、2、3先后执行,这里需要注意的是:考虑继承特性。

子类与父类的执行顺序是:

1、先执行父类的静态代码块(父1)

2、子类的静态代码块(子1)

3、父类构造代码块(父2)

4、父类构造方法(父3)

5、子类构造代码块(子2)

6、子类构造方法(子3)

当一个类从被JVM装载开始,各种代码的执行顺序大致如下:

被JVM装载->

执行父类的相关代码->

如果有静态初始化,先执行静态初始化,且只执行一次,以后即使有该类实例化,也不会再执行->

如果有静态代码块,以与静态初始化一样的方式执行->

如果有new语句带来的实例化,先为成员变量分配空间,并绑定参数列表,隐式或显式执行super(),即父类的构造方法->

执行非静态代码块->

执行本类的构造函数->

执行其他代码。

这里的执行顺序同子类构造中有一个默认的父类构造super()无关,不是执行到隐藏的super()才开始初始化父类的,类的初始化是分层初始化,即先初始化父类,再初始化子类,初始化每个类的过程中,进行类的初始化工作,先进性成员变量的初始化,成员变量的初始化顺序是:默认初始化,即int为0这种->显示初始化,例如给int型显示初始化了值->构造方法初始化,所以是这里执行到了构造方法。

但是一定要注意,父类初始化选择的构造方法却和子类中super 选择的构造相关,下面代码很好的解释了这点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值