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

Cartographer全局重定位优化:无初始位姿约束的2万平工厂秒级定位实践 本文深入解析了Cartographer在2万平工业场景中的全局重定位优化实践,通过分支定界优化、子图动态加载和多传感器融合等关键技术,实现了无初始位姿约束下的秒级重定位。特别针对大场景下的快速重定位需求,优化后的系统在RK3588平台上表现出色,定位耗时从47秒降至1.8秒,成功率提升至91%,为工业自动化提供了高效解决方案。 阅读详情

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

这里主要介绍一下必须对类进行“初始化”的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,说明定义常量的类没有被初始化,常量在编译阶段会存入调用类的常量池中,本质上并没有直接引用到定义常量的类。

Android14 Qcom 从Framework到Driver带你连接WIFI(一) 前面已经讲完了WIFI打开的流程,那么通过UI这时候是可以选择需要连接的网络进行连接。从这里开始我们看连接的流程。 阅读详情

相关推荐

华为昇腾Ascend C中级认证考试-tanh

注册昇腾社区账号后可以免费领券考试。

2600_96284887的博客 474

【Java】系统初始化启动项

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

qq_42666609的博客 854

实战指南:基于华为Ascend NPU的大模型W8A8量化调优与精度提升

本文提供了一份基于华为Ascend NPU进行大模型W8A8量化的实战调优指南。详细介绍了从环境搭建、使用msmodelslim框架进行基础量化,到通过离群值抑制、校准集优化和量化回退等关键技术提升精度的全流程。旨在帮助开发者在华为NPU硬件上实现模型推理的显著加速,同时有效控制精度损失。

weixin_29227425的博客 271

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

QUIC 协议域名封堵:核心原理、关键技术与实现路径(C/C++代码实现)

随着 QUIC 协议在互联网领域的广泛应用,其基于 UDP 的传输特性与加密设计,打破了传统 TCP 协议下的域名封堵逻辑,给网络合规管理与安全防护带来新的技术难题。本文将脱离具体代码实现,聚焦 QUIC 协议域名封堵的核心原理、关键技术环节与实际落地路径,从协议特性本质出发,解析如何在遵循 RFC 9000、RFC 9001 等规范的前提下,实现对 QUIC 流量的精准域名封堵。

chen1415886044的博客 1467

Stata实战:DID平行趋势检验完整操作指南(附reghdfe+coefplot代码)

本文提供了一份使用Stata进行DID平行趋势检验的完整实战指南。文章详细讲解了从数据准备、生成相对时间变量,到利用reghdfe命令构建动态效应模型,以及使用coefplot命令进行结果可视化的全流程操作。核心在于通过检验政策前交互项的显著性,验证处理组与对照组是否满足平行趋势假设,为后续因果推断奠定可靠基础。

weixin_29231725的博客 1381

java中初始化引用

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

weixin_44132084的博客 349

华为OD机试真题2025双机位C卷 C++ 实现【卡牌游戏】

小明正在尝试一种新的牌游戏。游戏规则只如下:首先,小明拿到一张写有数字m的牌。 然后,他会拿到另外n张牌,上面分别写有不同的数字,牌排成一排。小明的目标是从这排牌中找到一串连续的牌,这些牌上数字的总和可以被 m整除。你的任务是判断小明是否可以完成这个目标。

MISAYAONE的博客 282

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

java的自引用问题

han_100896的博客 1031

uniapp [安卓苹果App端] - 实现APP开发后台保活+息屏后台持续运行效果,强制后台保活手机黑屏后进程存活后台保持网络连接或持续定位等功能提供支持(app后台运行休眠仍然可以确保一直运行)

uniapp APP开发后台保活,Uniapp-APP后台保活插件(安卓苹果ios后台保活)保证应用在后台继续运行,uniapp实现app保活 保后台运行 避免系统主动杀进程,如何让安卓APP一直在后台运行?uniapp 安卓 APP 后台持续运行(保活)iOS App后台保活,Android 后台运行白名单实现保活,保活息屏后台运行,uniapp后台保活,uniapp熄屏 后台运行,Android/ios进程保活/息屏后后台保持定位、网络运行,uniapp在android ios保活,挂后台可运行,安卓A

🏆 前端领域优质创作者 1万+

基于Matlab模拟六自由度Stewart并联机器人运动学逆解

在现代工业和科学领域中,机器人技术的发展已经取得了巨大的进步,为生产和研究提供了许多便利。其中,六自由度Stewart并联机器人是一种广泛应用于各种领域的机器人系统。它具有高精度、高刚度和高可靠性的特点,被广泛应用于飞行模拟器、手术机器人和运动仿真等领域。然而,要使Stewart并联机器人能够实现复杂的运动任务,我们需要了解其运动学逆解。运动学逆解是指根据机器人末端执行器的位置和姿态,计算出各个关节的角度和长度。这对于控制机器人的运动非常重要,因为它可以帮助我们确定机器人各个关节的运动范围和工作空间。

qq_59747472的博客 1128

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

MATLAB与ROS联合仿真——实例程序搭建思路

MATLAB与ROS联合仿真——实例程序搭建思路

慕羽★的博客 5229

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

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

诚 525

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

weixin_44371237的博客 257

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、付费专栏及课程。

余额充值