java 类的加载顺序

类加载顺序:

(1)父类静态对象和静态代码块

(2)子类静态对象和静态代码块

(3)父类非静态对象和非静态代码块

(4)父类构造函数

(5)子类 非静态对象和非静态代码块

(6)子类构造函数

其中:类的静态块按照声明顺序执行,

拓展:静态块>main()>构造块>构造方法

定义:

静态块:用static 申明,JVM加载类时执行,仅执行一次;

构造块:类中直接用{}定义,每一次创建对象时执行;

 

 

### Java JVM虚拟机运行机制 JVM(Java虚拟机)是一种虚拟化的计算机,允许在其上执行Java程序(以及其他由Java编译器编译成字节码的程序),提供了一种跨平台的执行环境,具备“一次编写,到处运行”的特性[^2]。 一个Java文件从编码完成到最终执行,一般主要包括编译和运行两个过程。编译是通过`javac`命令将Java文件编译成字节码,即`.class`文件;运行则是把编译生成的`.class`文件交给Java虚拟机(JVM)执行[^3]。 JVM的运行机制主要包括内存划分、类加载机制和垃圾回收机制等。内存划分是将内存分为不同的区域,如堆、栈、方法区等,不同区域有不同的作用。类加载机制负责将Java字节码文件加载到内存中,并转换成可执行的Java。垃圾回收机制则负责回收不再使用的内存空间,以提高内存的利用率[^2]。 ### Java类加载顺序 JVM的类加载机制基于类加载器的概念,并按照特定的顺序进行类加载类加载过程一般分为以下几个步骤: 1. **加载**:通过的全限定名来获取定义此的二进制字节流,将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构,在内存中生成一个代表这个的`java.lang.Class`对象,作为方法区这个的各种数据的访问入口。 2. **验证**:确保被加载的的正确性,验证字节码文件的格式、语义等是否符合Java虚拟机规范。 3. **准备**:为的静态变量分配内存,并将其初始化为默认值。例如,`int`型的静态变量初始值为0。 4. **解析**:将常量池内的符号引用替换为直接引用的过程。符号引用是一种文本形式的引用,而直接引用是指向目标的指针、句柄或偏移量等。 5. **初始化**:执行构造器`<clinit>()`方法的过程。`<clinit>()`方法是由编译器自动收集中的所有变量的赋值动作和静态语句块(`static{}`块)中的语句合并产生的。 类加载器有不同的型,如启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader)等,它们按照双亲委派模型进行类加载,即当一个类加载器收到类加载请求时,它首先会把这个请求委托给父类加载器去完成,只有当父类加载器无法完成加载请求时,子类加载器才会尝试自己去加载[^1]。 以下是一个简单的示例代码,展示类加载过程中静态变量和静态代码块的执行顺序: ```java class Parent { static { System.out.println("Parent static block"); } static int parentStaticVar = 10; } class Child extends Parent { static { System.out.println("Child static block"); } static int childStaticVar = 20; } public class ClassLoadingOrderExample { public static void main(String[] args) { System.out.println(Child.childStaticVar); } } ``` 在上述代码中,当执行`main`方法时,会触发`Child`的加载。由于`Child`继承自`Parent`,根据类加载顺序,会先加载`Parent`,执行`Parent`的静态代码块和静态变量初始化,然后加载`Child`,执行`Child`的静态代码块和静态变量初始化,最后输出`Child`的静态变量`childStaticVar`的值。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

menglixiazhiweizhi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值