Java类的加载过程
Java类的加载过程包括加载、链接和初始化三个阶段。在加载阶段,虚拟机会通过类的全名获取该类的二进制字节流,并将这个字节流代表的静态存储结构转化为方法区的运行时数据结构。在链接阶段,虚拟机会将类的二进制数据中的符号引用替换为直接引用,并对类的数据进行验证、准备和解析操作。初始化阶段则是虚拟机执行类构造器()方法的阶段。
类加载执行顺序
在实际应用中,Java类的加载顺序是按照以下顺序执行:先加载父类,再加载子类。父类中静态变量、静态初始化块会比子类先执行。子类中静态变量、静态初始化块会按照其在类中声明的顺序依次执行。如果子类没有声明构造方法,在子类的构造函数执行之前,父类的默认构造函数会被执行。
示例代码
下面是一个基础示例,展示了类加载的顺序:
public class Parent{ public static int num = 1; static{ System.out.println("父类静态初始化块"); } } public class Child extends Parent{ public static int num = 2; static{ System.out.println("子类静态初始化块"); } public Child(){ System.out.println("子类构造函数"); } } public class Test{ public static void main(String[] args){ System.out.println(Child.num); } }
执行上述代码后,输出结果为:
父类静态初始化块 子类静态初始化块 2
可以看出,父类的静态初始化块先于子类执行,子类的静态初始化块后于父类执行,最后输出的是子类的静态变量。
总而言之,了解Java类加载执行顺序有助于我们更好地理解类的执行过程,并在实际开发中更好地进行调试和优化。
本文来自投稿,不代表亲测学习网立场,如若转载,请注明出处:https://www.qince.net/javaesa8java.html
郑重声明:
本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
我们不承担任何技术及版权问题,且不对任何资源负法律责任。
如遇到资源无法下载,请点击这里失效报错。失效报错提交后记得查看你的留言信息,24小时之内反馈信息。
如有侵犯您的版权,请给我们私信,我们会尽快处理,并诚恳的向你道歉!