java代码的执行顺序

1.java代码的执行顺序如下:

开始 --> 父类的静态代码块 --> 子类的静态代码块 --> 父类的普通代码块 --> 父类的构造方法

--> 子类的普通代码块 --> 子类的构造方法 --> 结束

注意事项

      1.静态代码块(也就是被关键字static修饰的代码块)只在程序初次运行时执行一次,也就是说,无论你实例化(new)多少个对象,静态代码块都只执行一次;其原因就在于静态代码块只是在类被加载进内存时执行,而类加载到内存中只需执行一次,所以静态代码块也就只执行一次.

2.经过上面的论述,下面结合代码来理解java代码的执行顺序

代码中需要注意的点:

TestDemo5是继承于BB类的;而BB类则继承于AA类

那图中的代码运行结果会是怎样呢?

1. 代码会先从main方法执行,main是TestDemo5这个类的静态方法,就会触发TestDemo5的类

加载.

2.由于BB是TestDemo5的父类,那么在加载TestDemo5之前,就会先加载BB

3.又因为AA是BB的父类,那么在加载BB之前,就会先加载AA

所以总体的加载顺序是:加载AA->加载BB->加载TestDemo5->执行main方法

4.加载AA就会调用其中的静态代码块  父类AA的静态代码块

5.加载BB就会调用BB中的静态代码块 子类BB的静态代码块

6.TestDemo5中没有静态代码块,就执行main方法中的内容,也就是打印  "开始"

7.new BB()

    构造BB的实例之前会先够造AA的实例,先执行AA中的代码块和构造方法;然后再执行

BB中的代码块和构造方法

        父类AA的实例代码块        

        父类AA的构造方法

        子类BB的实例代码块

        子类BB的构造方法

8.然后走到mian方法的最后一步打印 "结束"

程序执行结果如下:

3.若在main方法中进行两次 newBB(),其他都不改变的情况下;那结果会发生怎样的变化呢?

 程序运行结果如下:

 从运行结果中可以看到;就算是实例化了两次BB类;但是 AA类和BB类的静态代码块也只是执行

了一次,这就说明静态代码块只在程序初次运行时执行一次.

 4.如果TestDemo5不继承于BB;结果又会如何呢?

 如果不让TestDemo继承BB;那么TestDemo在进行类加载的时候就不会触发AA和BB的加载;就会先进行调用main函数;首先打印 "开始",然后在newBB()的时候再触发AA和BB的类加载,就会按照先加载父类的静态代码块->子类静态代码块->父类普通代码块->父类的构造方法->子类的普通代码块->子类的构造方法 的顺序执行;最后打印 "结束"

程序执行结果如下:

希望本博客让您对java代码执行顺序的理解有所帮助!!!

  • 24
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值