Java中对类进行初始化(主动引用,被动引用)

IDM更改下载路径的详细指南 Internet Download Manager(IDM)是一款功能全面的下载加速工具,它支持多种浏览器和协议,能够显著提升下载速度,同时提供断点续传、多线程下载等实用功能。IDM的用户界面简洁明了,操作便捷,使得用户能够轻松管理下载任务。此外,IDM还支持自动分类下载文件、定时下载等高级功能,进一步提升了用户的下载体验。通过本文的介绍,相信用户已经掌握了如何在IDM中更改下载路径的方法。这一功能不仅提升了下载效率和文件管理便捷性,还满足了用户的个性化需求。 阅读详情

一个类的整个生命周期包括:加载,验证,准备,解析,初始化,使用,卸载

这里主要介绍一下必须对类进行“初始化”的5种情况

1、遇到new,getstatic,putstatic,invokestatic这四条字节码指令时;

2、对类进行反射调用时,如果类没有进行过初始化,则需先触发其初始化;

3、当初始化一个类时,其父类还没初始化,则需先触发其父类初始化;(PS:当一个接口在初始化时,并不要求其父接口全部都已初始化,只有在真正使用到父接口的时候才会初始化)

4、当虚拟机启动时,会先初始化主类;

5、当使用JDK1.7的动态语言支持时,如果一个java.lang.invoke.MethodHandle实例最后的解析结果  REF_getStatic, REF_gpuStatic,REF_invokeStatic的方法句柄,并且这个方法句柄所对应的类没有进行过初始化,则需要先触发其初始化。

以上五种场景称为对类进行主动引用,除此之外,所有引用类的方式都不会触发初始化,称为被动引用

下面介绍几个被动引用的例子

1、通过子类引用父类的静态字段

class FatherClass{
	static{
		System.out.println("FatherClass init");
	}
	public static int value = 123;
}
class SonClass extends FatherClass{
	static{
		System.out.println("SonClass init");
	}
}

public class Demo{
	public static void main(String[] args){
		System.out.println(SonClass.value);
	}
}

运行结果

可以看到,并没有输出SonClass init,子类没有被初始化,对于静态字段,只有直接定义这个字段的类才会被初始化

2、通过数组定义来引用类

class FatherClass{
	static{
		System.out.println("FatherClass init");
	}
	public static int value = 123;
}

public class Demo{
	public static void main(String[] args){
		FatherClass[] ar = new FatherClass[10];
	}
}

该程序不会有任何输出,没有输出FatherClass init,说明没有触发FatherClass初始化

3、调用常量时

class ConstClass{
	static{
		System.out.println("ConstClass init");
	}
	public static final String STR = "hello";
}

public class Demo{
	public static void main(String[] args){
		System.out.println(ConstClass.STR);
	}
}

运行结果

从结果中可以看出,并没有出现ConstClass init,说明定义常量的类没有被初始化,常量在编译阶段会存入调用类的常量池中,本质上并没有直接引用到定义常量的类。

Python速成指南:进阶篇 欢迎来到Python速成指南的进阶篇。如果你已经完成了基础篇的学习(Python速成指南:从零开始的编程之旅-优快云博客),并且对Python的基本概念有了扎实的理解,那么你已经为进入更深层次的Python世界做好了准备。在这个进阶篇中,我们将深入探讨Python的高级特性,并着重于如何在实际工作中应用这些知识。深入理解Python的高级特性掌握在实际项目中常用的技巧和最佳实践提高代码质量和性能了解Python在各个领域的专业应用让我们开始这段激动人心的Python进阶之旅吧! 阅读详情

相关推荐

PyTorch实战:3D U-Net医学图像分割从零搭建(附完整代码)

本文详细介绍了如何使用PyTorch从零搭建3D U-Net模型进行医学图像分割,涵盖三维卷积实现、模块化架构设计、医学图像专属优化策略及完整训练流程。通过实战代码演示,帮助开发者掌握UNet-3D在CT、MRI等三维医学图像分割中的应用,提升肝脏肿瘤分割、肺结节检测等任务的准确性。

weixin_29061997的博客 330

【Java】系统初始化启动项

不知道各位在开发过程中是否遇到过这样的问题:我想将某些配置信息在系统启动的时候就把他查出来存在缓存里面,方便后续前端接口调用的使用。本篇文章就是提供解决这个问题的方法的。其实非常简单,就是建立个启动配置类就可以了!InitDataService这个类是自己写的一个初始化系统配置的类,具体可以参考之前的文章。在run这个方法里面写上任何你想要在项目启动第一时间就执行的方法就可以了。

qq_42666609的博客 854

DOA估计算法从原理到仿真——CBF、Capon、MUSIC算法

从原理出发理解并实现经典的DOA估计算法

m0_55845774的博客 1万+

Java引用类型数据的初始化过程

对象的构造及初始化程序的步骤总结 (1)分配内存空间。 (2)进行属性的默认初始化。 (3)进行属性的显式初始化。 (4)执行构造器。 (5)为引用类型变量赋值。 我们以下面这样一段代码来分析 Email el; e1 = new Email("123@qq.com","capter3",2); System.out.println("第一封邮件的地址是:"+e1.getAddress()); E...

qq_43941796的博客 775

CentOS 环境 sngrep 安装及使用

在呼叫中心类应用开发过程中,经常需要对 SIP 信令抓包,分析排查问题。通常抓包的工具非常多样,如 Wireshark、tcpdump、ngrep 等都是可选项,但是针对 SIP 信令的抓包,sngrep 则更为好用。因为 sngrep 不仅提供了图形界面,还会将一通会话的 SIP 信令关联汇总,非常直观执行以下命令下载 的相关依赖库 1.2 添加 sngrep 的源并导入 执行下面的命令新增一个源仓库配置文件 然后在该文件中写入以下配置内容 执行命令导入源仓库的公钥 1.3 安装 sngrep

谈谈1974 8149

macOS 12.7.6部署Ollama+Dify避坑指南

本文介绍了在macOS 12.7.6系统下部署Ollama和Dify的详细步骤及避坑指南。主要内容包括:1)关闭系统完整性保护(SIP)以允许修改系统目录;2)安装特定版本的Docker(2.1.0.5)和docker-compose(v2.38.2)以避免兼容性问题;3)配置Ollama服务并下载nomic-embed-text和deepseek-r1:7b模型;4)针对macOS调整Dify的docker配置文件,包括延长超时时间、修改存储路径、增加资源限制等关键设置。文中提供了完整的命令操作步骤和配置

Hi20240217的博客 3105

java中初始化引用

1.在定义对象的地方。这意味着它们总是能够在构造器被调用之前被初始化; 2.在类的构造器中; 3.就在正要使用这些对象之前,这种方式为“惰性初始化”; 4.使用实例初始化。 样例代码如下: public class Bath { private Soap castitle; //定义时初始化 private String s1 = “happy”; private String s2; priva...

weixin_44132084的博客 349

一文搞懂电流、电压的有效值 RMS

交流电有正半周、负半周,直接平均可能抵消成 0,但负半周一样会发热。这个交流电如果换成直流电,能产生同样发热功率时,对应的直流电压或电流”,电容耐压通常不能按 220V 选,常见会选 400V 或更高余量。所以做硬件时,220VAC 整流滤波后电容上会接近。电压/电流的有效值,也叫。如果它加在电阻上,发热按。

qq_52293640的博客 452

java自引用/类的递归调用问题

java的自引用问题

han_100896的博客 1031

2020年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第3题)

2020年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第3题)

王老师青少年编程 992

js逆向第3例:蝉妈妈大屏实时数据formDataSign加密

蝉妈妈大屏抖音直播实时数据是抓取抖音直播间数据的实时数据,有类似需求的公司但没有能力去搞定抖音,抓取蝉妈妈数据也是一个不错的选择。接下来就是调试找到加密点,说句题外话蝉妈妈的所有js文件打包方式用的都是webpack5,那如何区分打包方式可以阅读这篇文章。时间戳 ,经过观察发现加密参数是实时变化的。这个函数扣下来,在浏览器控制台中测试一下。言归正传,打断点找到变量。继续打断点向上找又发现了。查看请求参数,可以看到。请求的内容,那么这个。

花臂不花Home 1542

C++类中引用成员和常量成员的初始化(初始化列表)

如果一个类是这样定义的: Class A { public: A(int pram1, int pram2, int pram3); privite: int a; int &b; const int c; } 假如在构造函数中对三个私有变量进行赋值则通常会这样写: A::A(int pram1, int pram2, int pram3) { a=pram1; b=pram2

skysys的研究小屋 2135

Autosar配置——导入DBC后配置SecOC同步报文和同步请求报文

在Autosar中,安全性是一个重要的考虑因素,而SecOC(Secure On-Board Communication)是一种用于保护通信数据完整性和安全性的安全机制。在上述示例中,我们配置了同步报文和同步请求报文的属性。接下来,我们需要在Autosar中配置同步报文和同步请求报文。同步报文用于在通信双方之间同步SecOC状态,而同步请求报文用于请求SecOC的状态信息。通过以上配置,我们成功地导入了DBC文件,并在Autosar系统中配置了SecOC同步报文和同步请求报文。希望以上信息对您有所帮助!

CyberSphinx的博客 649

深入理解jvm--Java类的初始化及主动引用和被动引用完全解析

转自:https://blog.youkuaiyun.com/u013309870/article/details/73005868 初始化 类初始化阶段是类加载过程的最后一步,前面的类加载过程中,除了在加载阶段用户应用程序可以通过自定义类加载器参与之外,其余动作完全由虚拟机主导和控制。 到了初始化阶段,才真正开始执行类中定义的Java程序代码(或者说是字节码)。初始化阶段是执行类构造器<clinit>()...

诚 525

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java 高级 类初始化过程(主动引用、被动引用)static方法中为什么不能用this?

这里参考了一下这个文章,大家感觉可以再阅读一下 文章地址:https://blog.youkuaiyun.com/weixin_42636552/article/details/82949999 首先可以看一下这篇文章:https://zhuanlan.zhihu.com/p/86441683 类的主动引用(一定会发生类的初始化 遇到 new,getstatic,putstatic,invokestatic这4条字节码指令时,假如类还没进行初始化,则马上对其进行初始化工作。 其实就是3种情况: 1> 用.

CTRA®王大大技术中心 318

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java 类初始化(主动引用与被动引用)

weixin_44371237的博客 257

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java命令主动清空jvm_JVM:主动引用和被动引用,谁会触发类初始化?

生活的道路一旦选定,就要勇敢地走到底,决不回头。——左拉引导语学习类加载机制之前,先通过本节了解下类的生命周期以及初始化的一些思考。1 类的生命周期一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载、验证、准备、解析、初始化、使用和卸载七个阶段,其中验证、准备、解析三个部分统称为连接。(其中前五个阶段是类加载的全过程)2 主动引用和被动引用什么情况下需要开始类加载过...

weixin_29188997的博客 129

Java300StudyNote(7)-JVM核心机制(2)-初始化时机-类的主动引用、被动引用、静态初始化块执行顺序问题

1、类的初始化a、执行类构造器<clinit>()方法的过程,类构造器方法是由编译器自动收集类中的所有变量的赋值动作和静态初始化块中的语句合并产生的 b、初始化一个类的时候,先初始化它的父类 c、虚拟机会保证执行类构造器方法<clinit>()的执行是被正确加锁和同步的,也就是说这个方法是线程安全的2、类的主动引用(一定会发生类的初始化) new一个类的对象 调用类的静态成员变量(除了final

RhymeChiang 354

十、分析类初始化

狂神说Java:https://www.bilibili.com/video/BV1p4411P7V3 1、什么时候会发生类初始化 类的主动引用(一定会发生类的初始化) 当虚拟机启动时,先初始化main方法所在的类 new一个类的对象 调用类的静态成员(除了final常量)和静态方法 使用java.lang.reflect包的方法对类进行反射调用 当初始化一个类,如果其父类没有被初始化,则会先初始化它的父类 类的被动引用(不会发生类的初始化)、 当访问一个静态域时,只有真正声明这个域的类才会被.

有人的地方,就是江湖 178

类的主动引用跟类的被动引用

类的主动引用(一定会发生初始化),类的被动引用(不会发生类的初始化),发生类的主动引用有五种情况分别是: new一个类的对象 调用类静态变量,和静态方法 对类进行反射调用 启动main方法所在的类 当初始化一个类,如果其父类没有被初始化,则先会初始化他的父类 类的被动引用有三种情况分别是: 引用常量不会触发此类的初始化(常量在编译阶段就存入调用类的常量池中了) 通过数组...

weixin_44552194的博客 303

Java中对类的主动引用和被动引用

  在Java代码中,有些类看上去初始化了,但其实没有。例如定义一定长度某一类型的数组,看上去数组中所有的元素已经被初始化,实际上一个都没有。对于类的初始化,虚拟机规范严格规定了只有对该类进行主动引用时,才会触发。而除此之外的所有引用方式称之为对类的被动引用,不会触发类的初始化。虚拟机规范严格地规定了有且仅有四种情况是对类的主动引用,即必须立即对类进行初始化。四种情况如下:1.遇到new、g...

ayaoxinchao2的博客 291

java类的主动引用和被动引用

本文参考《深入理解JAVA虚拟机》第2版,此书JDK版本为1.7。 主动引用 java类的初始化阶段,虚拟机规范严格规定了5种情况必须立即对类进行初始化。 遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。 使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,...

fyzzz9的博客 623

java导出引用类_Java 中对类的主动引用和被动引用

简述:看了《深入Java虚拟机》一书中关于“类是否初始化?“ 这一问题的探讨后,觉得有必要亲手做下总结在实际代码中, 有些类可能看上去时初始化了,但实际上并没有。举个例子,对于一个类Fruit, 声明一个fruit[] 数组,看上去是很多个Fruit对象被初始化了,其实一个都没有,下面就竟可能全面的讨论一下这个问题检测方式在类里加一个静态区域,如果类初始化,那么这段静态区域就会有输出主动引用(会发...

weixin_31620365的博客 126

Java类初始化详解

分析java类初始化 什么时候会发生类的初始化 类的主动引用(一定会发生类的初始化) 当虚拟机启动,先初始化main方法所在的类 new一个类的对象 调用类的静态成员(除了final常量)和静态方法 使用java.lang.reflect包的方法对类进行反射调用 当初始化一个类,如果其父类没有被初始化,则先会初始化它的父类 类的被动引用(不一定发生类的初始化) 当访问一个静态域时,只有真正声明这个域的类才会被初始化。如:当通过子类引用父类的静态变量,不会导致子类初始化 通过数组定义类引用,不会

qq_47897078的博客 2656

类初始化

主动引用类初始化是类加载过程的最后一个阶段,到初始化阶段,才真正开始执行类中的Java程序代码。虚拟机规范严格规定了有且只有四种情况必须立即对类进行初始化: 遇到new、getstatic、putstatic、invokestatic这四条字节码指令时,如果类还没有进行过初始化,则需要先触发其初始化。生成这四条指令最常见的Java代码场景是:使用new关键字实例化对象时、读取或设置一个类的静态字段(

戎码人生 4846

java什么时候会发生类的初始化

什么时候会发生类的初始化 类的主动引用一定会发生类的初始化 当JVM虚拟机启动,先初始化main方法所在的类 new 一个类的对象 调用类的静态成员(final常量除外)和静态方法 使用java.lang.reflect包的方法对类进行反射调用 当初始化一个类,如果其父类没有被初始化,则会先初始化他的父类 类的被动引用(不会发生类的初始化) 当访问一个静态域时,只有真正申明这个域的类才会被初始化。如:当通过子类引用父类的静态变量,不会导致子类初始化。 通过数组定义类引用,不会触发此类的初始化 引用常量

木子 旭的博客 1363
上一篇: Java实现二分查找
下一篇: Java类加载的过程
AE86上山啦
博客等级 码龄8年 5粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值