虚拟机类加载机制
Posted yanqingguo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚拟机类加载机制相关的知识,希望对你有一定的参考价值。
本文参考《深入理解java虚拟机》
虚拟机加载类的过程:
java源程序被编译器编译成class文件后,会被虚拟机的类加载器加载,加载完成后,会为class文件在内存中开辟一块空间用来存储class文件对象,之后对class文件进行校验,准备,解析和初始化,最终形成能被虚拟机使用的java类型,这叫做类加载过程。
过程:
校验:检验class文件的正确性,判断class文件是否对虚拟机的安全造成威胁。
准备:为类成员分配内存空间,值得注意的是,会给静态属性默认赋值,比如 static int a,a的值在内存中默认是0。
解析:将符号引用转为直接引用。
初始化:为准备阶段的类成员赋于我们定义的值。
类加载过程图:
什么时候进行初始化?
1.使用putstatic,new,getstatic,invokestatic这四个字节码命令时进行初始化。
2.子类初始化时需要先把父类初始化。
3.对类进行反射调用时
4.含有主方法的类要被初始化
初始化要点
对于静态字段只有直接定义这个静态字段的类会被初始化。
package com.yqg.test; public class Cat extends Dog{ static { System.out.println("我是九尾"); } } package com.yqg.test; public class Dog { public static int value = 2; static { System.out.println("我是神犬"); } } package com.yqg.test; public class Test { public static void main(String[] args) { System.out.println(Cat.value); } }
结果:
我是神犬
2
以上是关于虚拟机类加载机制的主要内容,如果未能解决你的问题,请参考以下文章