大腿的博客

java类加载顺序

字数统计: 433阅读时长: 1 min
2018/11/05 Share

阅读《java编程思想》看到了java类加载的一点东西,通过查阅资料总结一下我对java类加载顺序的个人理解

结论

初始化顺序:

  1. 为静态变量、方法分配内存并赋值(静态方法后面大括号语句不执行,只初始化),执行静态代码块(立刻执行大括号里面的语句)。静态加载顺序自上而下。
  2. 初始化构造方法(只初始化,等待非静态属性加载)
  3. 为非静态属性分配内存并赋值
  4. 执行构造代码块(构造代码块在每次创建对象的时候都会执行一次)
  5. 执行构造方法
  6. 非静态代码块 或 静态方法(调用才加载)。

如果有继承关系

  1. 父类静态方法成员变量代码块
  2. 子类静态方法成员变量代码块
  3. 父类构造方法初始化
  4. 子类构造方法初始化
  5. 父类非静态属性分配内存并赋值
  6. 子类非静态属性分配内存并赋值
  7. 执行父类构造代码块
  8. 执行父类构造方法
  9. 执行子类构造代码块
  10. 执行子类构造方法

接口、内部类等,调用时加载

main方法怎么执行的呢?

参考博客(https://www.cnblogs.com/iceAeterNa/p/4876940.html)

java应用程序的启动在在/hotspot/src/share/tools/launcher/java.c的main()函数中,而在虚拟机初始化过程中,将创建并启动Java的Main线程。最后将调用JNIEnv的CallStaticVoidMethod()来执行main方法。
CallStaticVoidMethod()对应的jni函数为jni_CallStaticVoidMethod,定义在/hotspot/src/share/vm/prims/jni.cpp中,而jni_CallStaticVoidMethod()又调用了jni_invoke_static(),jni_invoke_static()通过JavaCalls的call()发起对Java方法的调用

原文作者:大腿君的大腿君

原文链接:https://shiyuquan.github.io/2018/11/05/java类加载顺序/

发表日期:2018-11-05 11:06:01

更新日期:2018-11-05 12:39:21

版权声明:来自于大腿的许可

CATALOG
  1. 1. 结论
    1. 1.1. 初始化顺序:
    2. 1.2. 如果有继承关系
    3. 1.3. main方法怎么执行的呢?