详解Java中类的加载顺序
程序员文章站
2024-03-08 23:10:46
本文介绍的是java中类的加载顺序,下面来看看详细的介绍:
1、虚拟机在首次加载java类时,会对静态初始化块、静态成员变量、静态方法进行一次初始化
2...
本文介绍的是java中类的加载顺序,下面来看看详细的介绍:
1、虚拟机在首次加载java类时,会对静态初始化块、静态成员变量、静态方法进行一次初始化
2、只有在调用new方法时才会创建类的实例
3、类实例创建过程:按照父子继承关系进行初始化,首先执行父类的初始化块部分,然后是父类的构造方法;再执行本类继承的子类的初始化块,最后是子类的构造方法
4、类实例销毁时候,首先销毁子类部分,再销毁父类部分
示例
public class parent { public static int t = parentstaticmethod2(); { system.out.println("父类非静态初始化块"); } static { system.out.println("父类静态初始化块"); } public parent() { system.out.println("父类的构造方法"); } public static int parentstaticmethod() { system.out.println("父类类的静态方法"); return 10; } public static int parentstaticmethod2() { system.out.println("父类的静态方法2"); return 9; } @override protected void finalize() throws throwable { // todo auto-generated method stub super.finalize(); system.out.println("销毁父类"); } }
public class child extends parent { { system.out.println("子类非静态初始化块"); } static { system.out.println("子类静态初始化块"); } public child() { system.out.println("子类的构造方法"); } public static int childstaticmethod() { system.out.println("子类的静态方法"); return 1000; } @override protected void finalize() throws throwable { // todo auto-generated method stub super.finalize(); system.out.println("销毁子类"); } }
public class test { public static void main(string[] args) { // todo auto-generated method stub parent.parentstaticmethod(); // child child = new child(); } }
输出
父类的静态方法2 父类静态初始化块 父类类的静态方法
类中static 方法在第一次调用时加载,类中static成员按在类中出现的顺序加载。当调用静态方法2时输出
父类的静态方法2 父类静态初始化块 父类的静态方法2
注释掉parent.parentstaticmethod();
去掉注释child child = new child();
父类的静态方法2 父类静态初始化块 子类静态初始化块 父类非静态初始化块 父类的构造方法 子类非静态初始化块 子类的构造方法
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
上一篇: Java8接口的默认方法
下一篇: ASP.NET 前后台调用方法