java static 块 时机_java的static块执行时机

之前一直认为static块是在class load的时候执行,今天在验证Spring初始化Context loader的时候,发现bean的static块并没有执行。

Class A{

static{

System.out.println("static block invoked!")

}

}

那么static块到底在什么时候运行的呢?如果了解JVM原理,我们知道,一个类的运行分为以下步骤:

装载

连接

初始化

其中装载阶段又三个基本动作组成:

通过类型的完全限定名,产生一个代表该类型的二进制数据流

解析这个二进制数据流为方法区内的内部数据结构

创建一个表示该类型的java.lang.Class类的实例

另外如果一个类装载器在预先装载的时遇到缺失或错误的class文件,它需要等到程序首次主动使用该类时才报告错误。

连接阶段又分为三部分:

验证,确认类型符合Java语言的语义,检查各个类之间的二进制兼容性(比如final的类不用拥有子类等),另外还需要进行符号引用的验证。

准备,Java虚拟机为类变量分配内存,设置默认初始值。

解析(可选的) ,在类型的常量池中寻找类,接口,字段和方法的符号引用,把这些符号引用替换成直接引用的过程。

当一个类被主动使用时,Java虚拟就会对其初始化,如下六种情况为主动使用:

当创建某个类的新实例时(如通过new或者反射,克隆,反序列化等)

当调用某个类的静态方法时

当使用某个类或接口的静态字段时

当调用Java API中的某些反射方法时,比如类Class中的方法,或者java.lang.reflect中的类的方法时

当初始化某个子类时

当虚拟机启动某个被标明为启动类的类(即包含main方法的那个类)

Java编译器会收集所有的类变量初始化语句和类型的静态初始化器,将这些放到一个特殊的方法中:clinit。

实际上,static块的执行发生在“初始化”的阶段。初始化阶段,jvm主要完成对静态变量的初始化,静态块执行等工作。

下面我们看看执行static块的几种情况:

1、第一次new A()的过程会打印"";因为这个过程包括了初始化

2、第一次Class.forName("A")的过程会打印"";因为这个过程相当于Class.forName("A",true,this.getClass().getClassLoader());

3、第一次Class.forName("A",false,this.getClass().getClassLoader())的过程则不会打印""。因为false指明了装载类的过程中,不进行初始化。不初始化则不会执行static块。

参考资料:深入Java虚拟机

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

五个问题,三大策略,手把手教你定制App性能监控方案

作者:友盟U-APM团队 Why? 为什么要做应用性能监控? 首先,我们要知道应用性能监控具体指什么?以及目的: 监控是一套完整的“监视报警”的系统。对于像我们这样的App开发者来说,应用性能监控是衡量App的第…

c++ 打印条码_金蝶盘点机PDA仓库条码管理之——外购入库扫码开单操作

优势点:收到供应商送货后,仓管员手持盘点机PDA现场将需要入库的商品按顺序扫描一遍,即可自动生成电脑软件金蝶里的【外购入库单】,避免仓管员往返电脑费时费事,和人工手工电脑录单效率低容易出错的问题,从而…

我在架构设计和代码开发中的一些常用原则

简介: 在日常的开发和设计过程中,大家对技术设计上的一些问题往往会面临很多的选择,不同的人会有不同的选择。本文介绍的就是我在工作中遇到的一些问题而总结和使用到的一些常用原则。 不管我一生中取得了多大的成功,其主要原因都…

坚持自主创新,凌波微步完成数千万A轮融资,加速半导体产业

随着5G、互联网、大数据、人工智能以及汽车电子等新技术、新产品的广泛应用,半导体产业已成为国民经济的基础性支撑产业。它是支撑经济社会发展,保障国家安全的战略性、基础性和先导性产业,其发展程度是衡量一个国家科技发展水平的核心指标之…

0x30 java_终于找到了!有了它你就可以读懂字节码了!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼0x80 ior 将栈顶两int型数值作“按位或”并将结果压入栈顶0x81 lor 将栈顶两long型数值作“按位或”并将结果压入栈顶0x82 ixor 将栈顶两int型数值作“按位异或”并将结果压入栈顶0x83 lxor 将栈顶两long型数值作“按位异或”并将结…

当程序员具备了抽象思维

简介: 若想捉大鱼,就得潜入深渊。深渊里的鱼更有力,也更纯净。硕大而抽象,且非常美丽。 作者:张建飞 若想捉大鱼,就得潜入深渊。深渊里的鱼更有力,也更纯净。硕大而抽象,且非常美丽…

平板电脑连接投影仪_交互式触控幼教白板如何与平板进行连接-微幼科技

现代智慧教学中离不开智能产品的辅助,电脑、平板就是其中之一。然而这两种电子产品的显示屏尺寸太小,并不能用于多人教学中。而55寸甚至上百寸幼教白板的出现,则可以解决多人互动教学的问题。那么,交互式触控幼教白板如何与平板进…

搭载了HarmonyOS 2的华为nova9,有哪些眼前一亮的功能?

9月23日,华为正式发布了nova9系列手机。作为年轻人的鸿蒙影像旗舰,nova9系列搭载了面向万物互联时代的HarmonyOS 2,沿袭nova品牌的年轻潮美基因,聚焦年轻人群的影像社交需求,在外观、影像、快充等多方面带来了创新突破…

谈AK管理之进阶篇 - 如何有效控制云上[最后一把密钥]的风险?

简介: 上一期“谈AK管理之基础篇”,我们讲了如何规范的进行访问密钥生命周期管理。通过分出不同权限的阿里云RAM子账号,将不同的权限分给不同的用户,这样一旦子账号泄露也不会造成全局的信息泄露。但是,由于子账号在一…

java log 对性能影响_Java日志框架性能比较

1 Java日志框架性能比较前面几章,笔者分别介绍了log4j,logback,log4j2三大日志实现框架。接下来,就用具体的数据比较下,哪个日志框架的性能更好!单线程:外循环100次,内循环100000次;多线程&…

备案域名绑定服务器后 提示需要备案_小程序开发需要多少钱?

现在越来越多的企业想通过微信小程序来宣传产品,为什么小程序那么火爆呢?奥晶科技为您解答,其优点不言而喻:1. 小程序建设的成本比APP建设成本低;2. 小程序能紧跟市场发展潮流,随时更新功能;3. …

Nacos配置安全最佳实践

简介: 本文讨论了自建Nacos和阿里云MSE的配置安全原理。并提出配置安全最佳实践。 作者:鲁严波 前言 配置管理作为软件开发中重要的一环,肩负着连接代码和环境的职责,能很好的分离开发人员和维护人员的关注点。 Nacos的配置管理…

云原生之上,亚马逊云科技发布多项容器与Serverless服务,持续发力现代化应用

亚马逊云科技持续发力现代化应用领域,在中国区域新推多项容器与Serverless服务及功能 在中国区域推出Amazon ECS Anywhere、Amazon Lambda容器镜像功能以及Amazon EMR on EKS等 2021年至今已发布近50个现代化应用领域全新服务与功能 编辑 | 宋 慧 出品 | CSDN云计…

2B 领域下低代码的探索之路

简介: 低代码将成为B端服务领域的基础设施,必将颠覆传统开发方式,未来可期。 作者:天晟 前言 大家好,我是钉钉宜搭前端一个小团队的负责人天晟,在阿里做了五年的低代码。今天的分享我们不讲技术细节&…

php全站文章搜索,翻出一篇老文章:php文本站内全文检索-PHP教程,PHP应用

/****************************************************原作者: uchinaboy修改:lingshidao特点:无需mysql支持;速度快;无需设置路径,放在哪级目录下,就搜索该目录和子目录;可以搜索一切文本类型…

启动延时缩短 50%-80%,函数计算发布镜像加速功能

简介: 容器镜像因其颠覆式创新成为云原生时代应用部署格式的事实标准。头部云厂商 FaaS (Function-as-a-Service) 服务如阿里云函数计算、AWS Lambda 也相继在 2020 年支持使用容器镜像部署函数,全面拥抱容器生态。 作者 | Shuai Chang 阿里云云原生 Se…

python字符串转化为数字-python 中判断字符串能否转换为数字类型

方法一: isdigit() 不可识别汉字 小数类型 str1 "1" str2 "2.1" str3 "三" str4 "3.3.3.3" print(str1.isdigit()) print(str2.isdigit()) print(str3.isdigit()) print(str4.isdigit()) 结果: True False False False 方法二: is…

易点云在京发布璇玑调度系统 中小企业办公IT升级步伐加快

中小企业是中国经济的基本细胞。数据显示,中小企业数量占我国企业总数的90%以上,对全国GDP的贡献达65%、税收贡献超过50%、解决了75%以上的城镇就业。 这些规模庞大的中小微企业的IT基础设施水平远远低于大型企业,“得过且过”是中国中小企业…

php explode txt,PHP explode():字符串转数组

PHP 使用 explode() 函数分割一个字符串,并将结果保存在一个数组中,其语法如下:array explode ( string $delimiter , string $str [, int $limit ] )参数说明:delimiter 表示分隔符,它是 str 的一个子串,可…

MaxCompute作业日常监控与运维实践

简介: MaxCompute作业日常监控与运维实践 监控项目作业超时运行 案例一 专用于业务团队取数的project_A ,基本都是手动跑SQL查询,每个作业执行基本不会很长时间,由于目前使用的是包年包月计算资源,为了防止单个作业…