# Java初始化时机详解 ## 引言 在Java中,初始化时机是一个非常重要概念,对于一个刚入行小白开发者来说,可能会感到困惑。本文将介绍Java初始化时机,包括静态变量、静态代码块、构造函数等初始化顺序和过程,并通过具体示例代码来帮助理解。 ## 初始化流程 下面是Java初始化流程图,以便更直观地理解各个部分之间关系。 ```mermaid erDiagra
原创 2024-05-06 03:41:05
32阅读
初始化情况1、创建实例。2、静态变量,或者为静态变量赋值。(被final修饰、已在编译期把结果放入常量池静态字段除外)3、静态方法。4、使用反射来强制创建爱你某个或接口对应java.lang.Class对象。5、
原创 2022-03-02 15:38:32
568阅读
初始化情况1、创建实例。2、静态变量,或者为静态变量赋值。(被final修饰、已在编译期把结果放入常量池静态字段除外)3、静态方法。4、使用反射来强制创建爱你某个或接口对应java.lang.Class对象。5、初始化某个子类。6、直接使用java.exe命令来运行某个主。7、如果初始化一个时候,如果发现父还没有初始化,则需要先触发其父...
原创 2021-08-06 16:24:40
1117阅读
虚拟机规范严格规定了有且只有5种情况必须立即对进行初始化。 1)遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。 2)使用java.lang.reflect包方法对进行反射调用时候,如果类没有进行过初始化,则需要先触发其初始化。 3)当初始化一个时候,如果发
转载 2023-06-03 23:46:56
188阅读
# Java Final初始化时机 ## 整体流程 下面是初始化Java final流程: ```mermaid pie title 初始化Java final流程 "加载" : 20 "链接" : 30 "初始化" : 50 ``` ## 步骤及代码 1. **加载**:加载final.class文件到内存 ```java // 无需手动编
原创 2024-07-11 04:13:18
30阅读
实例变量属于Java本身,只有当程序初始化该Java时才会为该类变量分配内存空间,并执行初始化.从程序运行角度来看,每JVM对一个Java初始化一次,因此Java程序每运行一次,系统只为变量分配一次内存空间,执行一次初始化.从语法角度来看,程序可以在2个地方对变量执行初始化:1)定义变量时指定初始值;2)静态初始化块中对变量指定初始值.这两种方式执行顺序与它们在源程序中排列
转载 2023-06-18 21:06:16
150阅读
Java加载时机及过程一、Java记加载时机 关于在什么时候需要开始加载第一个阶段“加载”,Java虚拟机规范没有进行强制性约束,这点可以交给虚拟机具体实现来自由把握。但是对于初始化阶段,Java虚拟机则是严格规定了有且只有六种情况必须立即对进行“初始化”(加载、验证、准备需要在此之前开始):遇到new、getstatic、putstatic或invokestatic这四条
转载 2023-06-14 22:03:52
82阅读
参考书籍:《深入理解Java虚拟机》周志明 1,生命周期2,初始化 《Java虚拟机规范》严格规定有且仅有六种情况必须对立即进行初始化,分别是: 1. 遇到new,getstatic,putstatic,invokestatic这四个字节码指令时,如果类型没有进行初始化,则需要进行初始化。生成四条指令代码场景:1. 使用new关键字实例化对象时 2. 读取或设置一个类型静态字段时
转载 2023-06-27 12:37:59
128阅读
生命周期:Java初始化:本阶段负责为变量赋正确初始值。(变量即静态变量)Java编译器把所有的变量初始化语句和静态初始化器通通收集到方法中,该方法只能被JVM调用,专门承担初始化工作。初始化一个必须保证其直接超已被初始化。并非所有都拥有()方法。以下不会拥有方法:该类既没有声明任何变量,也没有静态初始化语句。该类声明了变量,但没有使用变量初始化语句或静态初始化语句初
感觉总结得不错.我也补充几点. 就是关于初始化顺序问题,其实当java程序需要使用某个时,java虚拟机会确保这个已经被加载,连接,和初始化,其中连接过程又会执行验证,准备和解析这三个子步骤.这里不进行详细讲解.有关资料可以去google下. 那么当或者接口被加载和连接时,JVM严格定义了初始化时机,所有的JVM实现必须在每个
转载 2023-08-03 15:04:58
76阅读
会发生初始化情况(5点)1.虚拟机启动时,初始化main方法所在。2.调用静态成员(final修饰除外),静态方法。3.new一个对象4.初始化一个,其父先被初始化,下面一个例子概括前4点public class Text { static { System.out.println("main被加载!"); } public static void main(String[]
java虚拟机规范虽然没有强制性约束在什么时候开始加载过程,但是对于初始化,虚拟机规范则严格规定了有且只有四种情况必须立即对进行初始化,遇到new、getStatic、putStatic或invokeStatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这4条指令最常见java代码场景是:1)使用new关键字实例化对象2)读取一个静态字段(被final修饰
转载 2023-08-31 12:02:12
71阅读
前面讲过,java虚拟机只有在程序首次主动使用一个或接口时候才会初始化它。只有6种活动被看作是程序对和接口主动使用:1、创建实例。例如new语句创建实例,或者通过反射、克隆及序列号手段来创建实例。2、调用静态方法。3、访问某个或接口静态变量或者对该静态变量赋值。4、调用java API中某些反射方法,比如调用Class.forName("Worker")方法,加入Worker
从被加载到JVM中开始,到卸载出内存为止,它这个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段,其中加载、验证、准备、解析、初始化加载过程。本章内容是初始化阶段。初始化时机遇到new、getstatic、putstatic、invokestatic这4条字节码指令时,如果类没有进行过初始化,要进行初始化。其中final修饰静态字段除外,因为final static
目录1. 加载时机2. 初始化会发生初始化情况:不会发生初始化情况: 1. 加载时机以下5个情况,只要有1个出现,那么加载器就会将这个class文件加载到内存中:创建实例。使用静态变量或静态方法。使用反射方式来强制创建某个或接口对应java.lang.Class对象。初始化某个子类。直接使用java.exe命令来运行某个主。2. 初始化
转载 2023-06-05 14:29:17
152阅读
<clinit>()方法Java 加载初始化过程中,编译器按语句在源文件中出现顺序,依次自动收集所有变量赋值动作和静态代码块中语句合并产生方法。 如果类中没有静态语句和静态代码块,那可以不生成<clinit>() 方法。并且 <clinit>() 不需要显式调用父(接口除外,接口不需要调用父接口初始化方法,只有使用到父接口中静态变量时才需
转载 2024-06-22 14:39:43
35阅读
1.什么时候必须初始化,什么情况不会初始化虚拟机规范严格规定了有且只有五种情况必须立即对进行“初始化”:使用new关键字实例化对象时候、读取或设置一个静态字段时候,已经调用一个静态方法时候。使用java.lang.reflect包方法对进行反射调用时候,如果类没有初始化,则需要先触发其初始化。当初始化一个时候,如果发现其父没有被初始化就会先初始化。当虚拟机启
是什么时候初始化初始化时候会执行static块,这个是我们知道。那么我们可以用static块来做个实验。上面代码输出是: hello world init this is a test这说明了什么?在调用TR.hello_world时候,并没有初始化!而是在调用其方法test时候才初始化。这是因为在编译时候,常量(static final 修饰)会存入调用常量
深入理解初始化时机《Java虚拟机规范》初始化时机初始化时机初始化时机初始化时机初始化时机初始化时机六 《Java虚拟机规范》关于在什么情况下需要开始加载过程第一个阶段“加载”,《Java虚拟机规范中》并没有进行强制约束,这点可以交给虚拟机具体实现来自由把握。但是对于初始化阶段,《Java虚拟机规范》则是严格规定了有且只有六种情况必须立即对进行“初始化”(而加载、验证、准
# Java 枚举初始化时机详解 Java 枚举(Enum)是一个非常强大特性,它不仅仅是一个简单类型安全枚举,还可以拥有字段、方法和构造函数。理解枚举初始化时机对于开发高质量代码至关重要。本篇文章将通过代码示例详细说明这一点,并展示枚举在何时被初始化,以及如何在实际项目中使用它们。 ## 什么是 Java 枚举 Java 枚举是一种特殊,用于表示一组固定常量。使用枚举可以使
  • 1
  • 2
  • 3
  • 4
  • 5