For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
本文达小编为大家带来的是新手程序员需要掌握的java类生命周期的一些基础知识。一起看看吧。
介绍
一个java类的完整的生命周期会经历加载、连接、初始化、使用、和卸载五个阶段:
加载
主要是:把类的信息加载到方法区中,并在堆中实例化一个Class对象。
加载方式
根据类的全路径加载class文件
从jar的包中读取class文件
根据一定的规则实时生成,比如设计模式中的动态代理模式,就是根据相应的类自动生成它的代理类。
加载的时期
不是jvm启动就加载,而是在真是使用的时候才会触发加载。
new 一个类的时候
调用类的静态方法,以及读取或者修改一个类的静态字段的时候(不是常量)
这个类是程序的入口类
对这个类进行反射的时候(执行了上面的行为)
连接
一般会跟加载阶段和初始化阶段交叉进行。
验证
验证一下这个类是否合法,
字节码格式是否合法
变量和方法是否有重复
继承和实现是否符合标准
。。。
准备
给静态变量赋默认的初始值(不包括非静态变量)
解析
把符合引用转换为直接引用。
比如我们要在内存中找一个类里面的一个叫做show的方法,显然是找不到。但是在解析阶段,
jvm就会把show这个名字转换为指向方法区的的一块内存地址,比如c17164,通过c17164就可以找到show这个方法具体分配在内存的哪一个区域了。
这里show就是符号引用,而c17164就是直接引用。
在解析阶段jvm会将所有的类或接口名、字段名、方法名转换为具体的内存地址。
初始化
时机
和加载的时机一样,更准确的说初始化之前必须先经过加载,所以他们基本一样
new 一个类的时候
调用类的静态方法,以及读取或者修改一个类的静态字段的时候(不是常量)
这个类是程序的入口类
对这个类进行反射的时候(执行了上面的行为)
过程
按照顺序自上而下运行类中的【变量赋值语句】和【静态语句】,
如果有父类,则先按照顺序运行父类中的变量赋值语句和静态语句。
使用
使用阶段包括主动引用和被动引用。
主动引用(会引起类的初始化)
new 一个类的时候
调用类的静态方法,以及读取或者修改一个类的静态字段的时候(不是常量)
这个类是程序的入口类
对这个类进行反射的时候(执行了上面的行为)
被动引用(不会引起类的初始化)
引用父类的静态字段
以上的内容仅适用于java新手,希望对java的小伙伴们有所帮助。