【校招VIP】java代码的执行顺序

08月07日 收藏 0 评论 0 java开发

【校招VIP】java代码的执行顺序

转载声明:文章来源https://blog.csdn.net/weixin_61523952/article/details/124315151

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的类加载,就会按照先加载父类的静态代码块->子类静态代码块->父类普通代码块->父类的构造方法->子类的普通代码块->子类的构造方法 的顺序执行;最后打印 "结束"

程序执行结果如下:


C 0条回复 评论

帖子还没人回复快来抢沙发