没有合适的资源?快使用搜索试试~ 我知道了~
Java中类与对象的生命周期
0 下载量 49 浏览量
2020-12-22
22:11:23
上传
评论
收藏 53KB PDF 举报
温馨提示
试读
2页
类的生命周期 .java源文件经过编译后会生成相应的字节码文件(.class)。jvm通过解释器翻译字节码文件并在系统中执行。 而java类的生命周期是其字节码文件装载、连接、初始化、使用、和卸载的整个过程。 ● 装载。 jvm找到需要装载的类,将类的信息装载到jvm的方法区中。然后在堆区实例化一个java.lang.Class对象,作为方法区中的类的信息入口。 不同的jvm对于类的装载时机并不相同,有些在遇到这个类时装载这个类(虽然并不知道这个类是否会被用到),另一些则在真正用到一个类的时候才对它进行装载。 ● 连接阶段。连接阶段一般情况下在一
资源详情
资源评论
资源推荐
Java中类与对象的生命周期中类与对象的生命周期
类的生命周期
.java源文件经过编译后会生成相应的字节码文件(.class)。jvm通过解释器翻译字节码文件并在系统中执行。
而java类的生命周期是其字节码文件装载、连接、初始化、使用、和卸载的整个过程。
● 装载。
jvm找到需要装载的类,将类的信息装载到jvm的方法区中。然后在堆区实例化一个java.lang.Class对象,作为方法区中的
类的信息入口。
不同的jvm对于类的装载时机并不相同,有些在遇到这个类时装载这个类(虽然并不知道这个类是否会被用到),另一些
则在真正用到一个类的时候才对它进行装载。
● 连接阶段。连接阶段一般情况下在一个类加载了一部分之后开始,与装载阶段交叉进行。连接阶段主要做一些加载后的
验证以及初始化的准备工作,分为验证、准备、解析三个子阶段。
1、验证主要是验证一个被加载的类是否合法,以确保这个类能够被jvm运行。
2、准备阶段为类中的静态变量分配内存和jvm默认初值(不是程序中设定的初值。对于jvm,基本类型的默认处置为0,
而引用类型为null),并为常量分配我们在程序中设定的初值。
3、解析是指把常量池中的符号引用转换为直接引用,即将所有的类名、接口名、字段名、方法名转换为具体的内存地
址。
● 如果一个类被直接引用,则会触发类的初始化。被动引用则不会触发类的初始化。
直接引用的情况有:
1、创建类的新实例
2、调用类的静态方法
3、操作类或接口的静态字段(final字段除外)
4、调用Java的特定的反射方法
5、初始化一个类的子类
6、指定一个类作为Java虚拟机启动时的初始化类
初始化过程会初始化与类相关的赋值语句和静态语句(即有static关键字修饰的信息),其他语句在实例化对象的时候才
会运行。
初始化按照顺序运行类中的赋值语句和静态语句。如果有父类,则首首先运行父类中的语句。
以下情况不会引起类的初始化:
◇ 定义类数组
SampleClass[] samples = new SampleClass[5];
◇ 引用类的常量
String sampleConstant = SampleClass.SampleConstant;
● 使用
类的使用包括主动引用和被动引用。只有主动引用会实例化类对象。
● 卸载
如果下面的所有情况都成立,类将会被卸载:
1、类所有的实例都已经被回收。(即堆中不存在该类的任何实例)
2、加载该类的ClassLoader被回收。
3、该类对应的java.lang.Class对象没有任何地方被引用,无法在任何地方通过反射访问该类的方法。
weixin_38581308
- 粉丝: 2
- 资源: 893
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0