类的生命周期

  1. 类的生命周期

    1.加载:java将编译后的class文件通过类加载器将类的信息加载进虚拟机,如果没有找到对应的类则会提示异常;
    2.加载完成后,首先验证,检验文件是否符合规范,并且检验是否会 破坏jvm的完整性;
    3.验证完毕之后就是准备,这个准备就是为静态变量(由static修饰的变量)分配空间并赋值;这里的赋值并不是赋予我们写入的值而是系统根据对应的数据类型赋予默认的初始值;整型数赋值为0,浮点数赋值为0.0,字符型赋值为一个空格,布尔型赋值为false;
    解析:就是将符号引用转换为直接引用;即将变量指向分配的空间地址,之后直接引用变量所代表的地址;例如将变量名转为内存地址。以后使用这个成员变量时,就直接去这个内存地址去找了。
    4.初始化:该阶段会做两件事,首先是为静态变量赋予正确的初始值,这个初始值才是我们设置的那个值。第二件事就是调用静态代码块;(静态代码块在类中,方法外;由static修饰的一个代码段;可以用来为静态变量赋值)
    5.对象实例化:这个过程就是对类中的实例变量(没有static修饰的变量)进行实例化;实例化会做三件事:第一件事是为实例变量分配空间;第二件事是调用实例化代码块,实例化代码块的作用是可以为实例变量赋值;第三件事,调用构造方法;
    垃圾收集:垃圾收集jvm的一个线程,这个线程一般情况下是处于睡眠状态的,只有在jvm内存不够用时才回调用;垃圾回收有两种方式:一种是快速回收,另一种就是全局回收;快速回收是在新生代来进行的;当老年代或者持久代被填满时才才会执行全局回收;java将内存分为三个代:新生代,老年代,持久代。大部分的对象是从新生代中分配的;当新生代被填满时,一些幸存的对象会被移动到老年代中。持久代只要存放的是java类的信息(静态数据、常量池、字段描述、方法描述等)
    之后就是对象终结 卸载类型;
    值得注意的是实例化的顺序:
    注意:在我们实例化一个类的时候,当然是按照这个顺序执行的,所以一定是先初始化后实例化。
    在没有父子类继承关系时实例化的顺序是:
    先初始化静态变量,调用静态代码块,然后实例化实例变量,调用实例化代码块,调用构造方法;这个是顺序执行的不因为位置得改变而改变。
    从这个流程可以看出类是随着对象的产生而使用,随着对象的消失而消失,而变量的产生于消失是随着方法的使用而产生随着方法的结束而消失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值