.class文件的生成及加载过程

11 篇文章 0 订阅

.java文件和.class文件

.java文件:

用于保存源代码的文本文件(通俗的说:就是我们写的代码)

.class文件:

生成:使用javac命令可以编译该文件-----生成.class文件

加载过程:当运行Java程序是,首先运行JVM(Java虚拟机),然后再把class文件加载到JVM的方法区里,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构,并向程序员提供访问方法区内的数据结构的接口。

  1. 在加载class文件的时候,JVM会先加载类中的所有静态成员( 方法,变量,静态代码块 )都加载到方法区class文件的所处静态区中
  2. 当把所有的静态成员加载完成之后,开始给类中的所有静态成员变量进行默认初始化
  3. 当类中的所有静态成员变量默认初始化之后,接着开始给所有静态成员变量显示赋值。
  4. 当类中所有的静态成员变量显示赋值结束之后,静态代码块才会运行。
  5. 当静态代码块执行结束之后,才表示class文件加载完成

问题:为什么先加载的都是静态成员,非静态成员去了哪里?

首先建议大家先去了解一下静态成员与非静态成员的区别。

然后来解答一下这个问题:因为静态成员是属于类的,而非静态成员是属于类的对象,所以在加载的时候会先加载静态成员,只有将类实例化之后才会加载非静态成员

注意点:类加载器并不需要等到某个类被“首次主动使用”时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,如果在预先加载的过程中遇到了.class文件缺失或存在错误,类加载器必须在程序首次主动使用该类时才报告错误(LinkageError错误)如果这个类一直没有被程序主动使用,那么类加载器就不会报告错误

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值