当前位置: 首页 > news >正文

石家庄网站建设推广公司/广州网站建设推荐

石家庄网站建设推广公司,广州网站建设推荐,网站的建设框架,wordpress获取根目录路径GitHub:https://github.com/wangzhiwubigdata/God-Of-BigData 关注公众号,内推,面试,资源下载,关注更多大数据技术~大数据成神之路~预计更新500篇文章,已经更新50篇~ 类加载的时机 类的生命周期 类从被加载到虚拟机内存开始,到卸载出内存为…


GitHub:https://github.com/wangzhiwubigdata/God-Of-BigData

                   关注公众号,内推,面试,资源下载,关注更多大数据技术~大数据成神之路~预计更新500+篇文章,已经更新50+篇~ 

类加载的时机

类的生命周期

类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括以下 7 个阶段:

  • 加载
  • 验证
  • 准备
  • 解析
  • 初始化
  • 使用
  • 卸载

验证、准备、解析 3 个阶段统称为连接。

ee1b2f75d51d55768af061871a9d7f78.png

加载、验证、准备、初始化和卸载这 5 个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始(注意是“开始”,而不是“进行”或“完成”),而解析阶段则不一定:它在某些情况下可以在初始化后再开始,这是为了支持 Java 语言的运行时绑定。

类加载过程中“初始化”开始的时机

Java 虚拟机规范没有强制约束类加载过程的第一阶段(即:加载)什么时候开始,但对于“初始化”阶段,有着严格的规定。有且仅有 5 种情况必须立即对类进行“初始化”:

  • 在遇到 new、putstatic、getstatic、invokestatic 字节码指令时,如果类尚未初始化,则需要先触发其初始化。
  • 对类进行反射调用时,如果类还没有初始化,则需要先触发其初始化。
  • 初始化一个类时,如果其父类还没有初始化,则需要先初始化父类。
  • 虚拟机启动时,用于需要指定一个包含 main() 方法的主类,虚拟机会先初始化这个主类。
  • 当使用 JDK 1.7 的动态语言支持时,如果一个 java.lang.invoke.MethodHandle 实例最后的解析结果为 REF_getStatic、REF_putStatic、REF_invokeStatic 的方法句柄,并且这个方法句柄所对应的类还没初始化,则需要先触发其初始化。

这 5 种场景中的行为称为对一个类进行主动引用,除此之外,其它所有引用类的方式都不会触发初始化,称为被动引用

被动引用演示 Demo

Demo1

/*** 被动引用 Demo1:* 通过子类引用父类的静态字段,不会导致子类初始化。* * @author ylb**/
class SuperClass {static {System.out.println("SuperClass init!");}public static int value = 123;
}class SubClass extends SuperClass {static {System.out.println("SubClass init!");}
}public class NotInitialization {public static void main(String[] args) {System.out.println(SubClass.value);// SuperClass init!}}

对于静态字段,只有直接定义这个字段的类才会被初始化,因此通过其子类来引用父类中定义的静态字段,只会触发父类的初始化而不会触发子类的初始化。

Demo2

/*** 被动引用 Demo2:* 通过数组定义来引用类,不会触发此类的初始化。* * @author ylb**/public class NotInitialization {public static void main(String[] args) {SuperClass[] superClasses = new SuperClass[10];}}

这段代码不会触发父类的初始化,但会触发“[L 全类名”这个类的初始化,它由虚拟机自动生成,直接继承自 java.lang.Object,创建动作由字节码指令 newarray 触发。

Demo3

/*** 被动引用 Demo3:* 常量在编译阶段会存入调用类的常量池中,本质上并没有直接引用到定义常量的类,因此不会触发定义常量的类的初始化。* * @author ylb**/
class ConstClass {static {System.out.println("ConstClass init!");}public static final String HELLO_BINGO = "Hello Bingo";}public class NotInitialization {public static void main(String[] args) {System.out.println(ConstClass.HELLO_BINGO);}}

编译通过之后,常量存储到 NotInitialization 类的常量池中,NotInitialization 的 Class 文件中并没有 ConstClass 类的符号引用入口,这两个类在编译成 Class 之后就没有任何联系了。

接口的加载过程

接口加载过程与类加载过程稍有不同。

当一个类在初始化时,要求其父类全部都已经初始化过了,但是一个接口在初始化时,并不要求其父接口全部都完成了初始化,当真正用到父接口的时候才会初始化。

(完)

http://www.lbrq.cn/news/1261783.html

相关文章:

  • 网站服务商/百度热搜榜排名
  • 宝马itms做课网站/品牌宣传如何做
  • phpcms 网站根目录/seo百度快照优化公司
  • 网页制作怎么做多个网站/seo代运营
  • 查重网站开发/晋中网络推广
  • wordpress中文版插件/搜索关键词排名优化
  • 独立网站视觉设计优化品牌/焦作网络推广哪家好
  • 工信部网站域名备案信息查询/网站seo外链
  • 网站如何做百度百科/电脑优化大师有用吗
  • 钢材料 网站建设 中企动力/泉州seo排名扣费
  • 哈尔滨网站建设技术托管/微信推广方式有哪些
  • 新闻网站制度建设情况/怎样把个人介绍放到百度
  • 做网站威海/百度seo最新算法
  • 金融适合什么颜色做网站/手机自动排名次的软件
  • 旅游模板网站建设/宁波抖音seo搜索优化软件
  • 工厂网站建设/学电脑在哪里报名
  • wordpress菜单导航插件/武汉久都seo
  • 网站建站素材/北京疫情又严重了
  • 溧阳做网站/公关公司经营范围
  • 水果网络营销策划书/windows优化
  • 成都小程序系统定制开发/当阳seo外包
  • 宜兴做网站多少钱/郑州搜狗关键词优化顾问
  • wordpress免ftp/seo怎么才能优化好
  • 惠州网站建设设计/外链代发
  • 郑州免费自助建站模板/广告位招商怎么找客户
  • 可信赖的南昌网站制作/seo排名计费系统
  • 北京网站建设推荐q479185700上快/好看的seo网站
  • 网站开发都有/电商seo优化是什么意思
  • 网站开发设计师培训/网站技术解决方案
  • wordpress变成小程序/深圳网站设计专业乐云seo
  • Redis 常用数据结构以及单线程模型
  • C的数据类型与变量
  • 机器人抓取流程介绍与实现——机器人抓取系统基础系列(七)
  • 6.1、Redis多级缓存原理和优化、Redis部分参数优化调整
  • 题单【模拟与高精度】
  • 线程池的实现