热修复技术之Java相关

Java相关

内部类

我们所知道的:

  • 非静态内部类持有外部类引用;静态内部类不持有外部类引用

编译:

内部类与外部类在编译期都是顶级类,此时看做两个不同的类。但是,因为编译期会给外部类或者内部类的private成员和方法生成access&**方法。以达到内部类可以访问外部类的私有成员,外部类一样可以访问内部类的私有成员。所以和普通的两个不同的类还是不一样的

匿名内部类

按道理,补丁热修复是允许增加类的。但是添加一个匿名内部类的话,还是会提示新增了方法,这是会引发错误的

增加/减少匿名内部类,实际上对于热部署是无解的。应该极力避免

如果必须加入,要插入外部类的末尾

静态成员

类加载时机

什么时候会尝试加载一个类呢

  1. new一个类的对象
  2. 调用类的静态方法
  3. 获取类的静态成员
clinit

clinit方法会在类加载后,进行类初始化的时候调用。热修复是不支持的修复的。只能冷启动生效

init

在类加载后,对类对象进行初始化的时候会调用类的构造方法,会调用到init方法,来对非静态成员和方法进行初始化。对热部署没有影响

所以在创建一个类的对象的时候,流程应该是:

  1. 加载类,
  2. 调用clinit进行静态初始化,
  3. 调用构造函数,
  4. 调用init进行非静态初始化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值