一个java类静态代码和构造方法的执行顺序

107 阅读1分钟

一个java类中有静态代码块,又有构造函数内代码,那在类的创建过程中哪些代码先执行,如果类还有父类,同时父类也有静态代码块,也有构造函数代码,那他们的执行顺序是什么样的?我们用代码来实现看看效果。 1、首先创建两个类,父类Father.java和子类 Son.java,并给两个类加上构造函数代码逻辑和两个静态代码块逻辑。

父类: image.png 子类 image.png 2、创建一个main程序创建子类对象看结果: image.png 3、结果如下

image.png

那是不是可以认为:java类创建对象的时候先把 父类 和子类的静态代码块按顺序执行完,再依次执行 父类子类的构造方法呢?我们在创建对象后再次创建对象。

4、创建两次对象

image.png

我们看到静态代码块只在开始的时候执行了一次,后面创建对象就只执行构造方法了?那这是什么情况,我们猜测是不是静态代码块是在加载类的时候执行的呢?那我们写一个类加载器来加载试下【类加载不是本次重点】

5、先把父类和子类编译成class文件放到文件夹下

image.png

5、写一个自定义的类加载器

image.png

6、在main方法中执行加载子类

image.png

7、结果如下

image.png

8、总结: java类在加载到jvm,还没使用的时候就会依次执行父类--子类的静态代码块,同一个类中静态代码块是从上到下执行的。在使用类创建对象的时候,会依次执行父类--子类的构造方法。