一个java类中有静态代码块,又有构造函数内代码,那在类的创建过程中哪些代码先执行,如果类还有父类,同时父类也有静态代码块,也有构造函数代码,那他们的执行顺序是什么样的?我们用代码来实现看看效果。 1、首先创建两个类,父类Father.java和子类 Son.java,并给两个类加上构造函数代码逻辑和两个静态代码块逻辑。
父类:
子类
2、创建一个main程序创建子类对象看结果:
3、结果如下
那是不是可以认为:java类创建对象的时候先把 父类 和子类的静态代码块按顺序执行完,再依次执行 父类子类的构造方法呢?我们在创建对象后再次创建对象。
4、创建两次对象
我们看到静态代码块只在开始的时候执行了一次,后面创建对象就只执行构造方法了?那这是什么情况,我们猜测是不是静态代码块是在加载类的时候执行的呢?那我们写一个类加载器来加载试下【类加载不是本次重点】
5、先把父类和子类编译成class文件放到文件夹下
5、写一个自定义的类加载器
6、在main方法中执行加载子类
7、结果如下
8、总结: java类在加载到jvm,还没使用的时候就会依次执行父类--子类的静态代码块,同一个类中静态代码块是从上到下执行的。在使用类创建对象的时候,会依次执行父类--子类的构造方法。