class A
{
public static final A a=null;//改为int a = 1;//下面的静态块就不执行
static{System.out.println("A000000000");}
}
public class Test
{
public static void main(String[] args)
{
Object o=A.a;
}
}
通过javap -c Test查看经过编译后的字节码就明白了
不单单是null的问题,但null确实是问题之一
更重要的一个问题是会写到A.class常量池中的类型是有限的:String和几个基本类型
而A.a的类型是A
如果将a的类型改为String,为null仍然会去getstatic
如果a的类型为String,且有一个字符串值,那么A就使用ldc指令直接从B的常量池中取值,这表示a的值在编译的时候已经放到A.class中了。
假如A.a的值是编译期常量,如果Test类中使用了A.a,编译的是时候在Test.class存的就不是A.a的符号引用,而直接是A.a的值,这就不是主动使用了。
当然,这也并不是说所有String和几个基本类型的常量就会放到B的常量池中去
比如a是int类型,其值为32767,使用的就是sipush 32767,表示操作数直接跟在操作码后面
如果值为32768,还是会从常量池用ldc指令取值
但,不管如何,这种值都放到了Test.class中,要么在Test的常量池中,要么跟在字节码后面作为参数
相关推荐
总的来说,易语言中的静态变量初始化是程序设计中的一个重要概念,尤其是在需要保存函数间状态或者实现某种计数功能时。理解并恰当使用静态变量,可以极大地提高代码的效率和可读性。在实际编程过程中,应根据需求...
易语言源码易语言静态变量初始化源码.rar 易语言源码易语言静态变量初始化源码.rar 易语言源码易语言静态变量初始化源码.rar 易语言源码易语言静态变量初始化源码.rar 易语言源码易语言静态变量初始化源码.rar ...
Java 类加载器静态变量初始化机制详解 Java 类加载器是 Java 语言的核心组件之一,负责将 Java 字节码文件加载到内存中,以便 JVM 可以执行它们。在 Java 中,类加载器是通过委派机制来实现的,即一个类加载器可以...
C++中的全局变量初始化是一个重要的话题,涉及到程序的正确性和可预测性。全局变量,即具有静态存储期的变量,其生命周期始于程序开始,终于程序结束。本文将深入探讨全局变量初始化的时机、方式以及一些处理特殊...
在这个“易语言静态变量初始化源码.zip”压缩包中,我们可以预见到它包含了一个或多个示例程序,这些程序主要展示了如何在易语言中使用静态变量进行初始化。 在编程中,变量是存储数据的容器,而静态变量有别于普通...
然而,如果你想要将静态变量初始化为一个对象,PHP并不支持像Java那样的静态构造器或静态初始化块。在这种情况下,你需要在代码的某个时刻显式地调用一个方法来完成初始化。例如: ```php class A { static ...
同时,掌握类变量初始化顺序可以避免因误解而导致的错误,特别是在多线程环境中,对静态变量的并发访问和初始化顺序的控制需要特别注意。 总之,深入理解Java的ClassLoader机制和类变量初始化顺序是提升Java编程...
在 Java 中,静态数据初始化是指在类加载过程中对静态变量的初始化。静态变量是在类加载时被初始化的,而不是在实例创建时。静态变量的初始化顺序是按照它们在类中的定义顺序进行的。 在 Java 中有两种类型的变量:...
Java 变量初始化的时机可以分为两类:实例变量初始化和类变量初始化。 实例变量初始化 实例变量初始化可以在三个地方进行: 1. 定义实例变量的时候指定初始值; 2. 非静态初始化代码块中对实例变量指定初值; 3. ...
### 静态变量初始化的基本规则: 1. **默认初始化**:当类被加载时,静态变量首先会被赋予其数据类型的默认值。例如,`int`类型的静态变量会被初始化为`0`,`boolean`为`false`,引用类型为`null`。 2. **显式初始化...
详细讲解java类中静态变量,普通标量,对象、基本类型的初始化顺序。
详细介绍了Java的静态成员变量、静态数据块、非静态成员变量和非静态成员变量等初始化顺序
资源介绍: 源码演示了易语言静态变量的用法。是易语言初级例程, 资源作者:
在这个“易语言-易语言静态变量初始化”的示例中,我们将深入探讨易语言中的静态变量及其初始化。 静态变量在程序中扮演着重要的角色,它们具有持久性,即在函数或程序块执行期间被创建,但其生命周期远远超过函数...
### VC++全局变量初始化详解 #### 一、程序启动与全局变量初始化 在VC++环境中,当一个程序启动时,其加载过程与全局变量的初始化紧密相关。在本篇文章中,我们将详细介绍VC++中全局变量的初始化过程,尤其是动态...
1. 内存分配:静态变量在应用程序初始化时创建,而非静态变量需要被实例化后才会分配内存。 2. 生命周期:静态变量生存周期为应用程序的存在周期,而非静态变量的生存周期取决于实例化的类的存在周期。 3. 调用方式...
童鞋们在学习C++的时候,往往只是按照书本上的原文去强行记忆各种特性,比方说,静态变量只初始化一次。你心中一定在默念:一定要记住,static只会初始化一次云云,希望自己能够记住。告诉你,你为什么总是记不住,...
为您提供易语言静态变量初始化源码下载,易语言静态变量初始化源码系统结构:静态变量初始化例子, ======窗口程序集_启动窗口 | | | |------ __启动窗口_创建完毕 | | | |------ _按钮1_被单击 | | | |------ 静态...