.java文件和.class文件
.java文件:
用于保存源代码的文本文件(通俗的说:就是我们写的代码)
.class文件:
生成:使用javac命令可以编译该文件-----生成.class文件
加载过程:当运行Java程序是,首先运行JVM(Java虚拟机),然后再把class文件加载到JVM的方法区里,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构,并向程序员提供访问方法区内的数据结构的接口。
- 在加载class文件的时候,JVM会先加载类中的所有静态成员( 方法,变量,静态代码块 )都加载到方法区class文件的所处静态区中
- 当把所有的静态成员加载完成之后,开始给类中的所有静态成员变量进行默认初始化
- 当类中的所有静态成员变量默认初始化之后,接着开始给所有静态成员变量显示赋值。
- 当类中所有的静态成员变量显示赋值结束之后,静态代码块才会运行。
- 当静态代码块执行结束之后,才表示class文件加载完成
问题:为什么先加载的都是静态成员,非静态成员去了哪里?
首先建议大家先去了解一下静态成员与非静态成员的区别。
然后来解答一下这个问题:因为静态成员是属于类的,而非静态成员是属于类的对象,所以在加载的时候会先加载静态成员,只有将类实例化之后才会加载非静态成员
注意点:类加载器并不需要等到某个类被“首次主动使用”时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,如果在预先加载的过程中遇到了.class文件缺失或存在错误,类加载器必须在程序首次主动使用该类时才报告错误(LinkageError错误)如果这个类一直没有被程序主动使用,那么类加载器就不会报告错误