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 ...
注意:本文所说的全局变量指的是 variables with static storage,措词来自 c++ 的语言标准文档。 什么时候初始化 ... static initialization: 静态初始化指的是用常量来对变量进行初始化,主要包括 zero init
易语言静态变量初始化源码.zip这个是易语言源码,希望是你需要的例程,只有学习才会进步,感谢你的关注。谢谢
Java类加载器:静态变量初始化.docx
详细讲解java类中静态变量,普通标量,对象、基本类型的初始化顺序。
详细介绍了Java的静态成员变量、静态数据块、非静态成员变量和非静态成员变量等初始化顺序
资源介绍: 源码演示了易语言静态变量的用法。是易语言初级例程, 资源作者:
童鞋们在学习C++的时候,往往只是按照书本上的原文去强行记忆各种特性,比方说,静态变量只初始化一次。你心中一定在默念:一定要记住,static只会初始化一次云云,希望自己能够记住。告诉你,你为什么总是记不住,...
} 如果要将变量赋值为对象,那么只能在构造器中进行初始化,例如: class A { private $child; public function __construct() { $this->child = new B(); } } 但是php中并没有一个类似java中的静态构造器/静态块的...
为您提供易语言静态变量初始化源码下载,易语言静态变量初始化源码系统结构:静态变量初始化例子, ======窗口程序集_启动窗口 | | | |------ __启动窗口_创建完毕 | | | |------ _按钮1_被单击 | | | |------ 静态...
static所声明的变量在Java中有一个初始化的先后顺序,带着这个问题接下来我们就来进行Java中static静态变量的初始化完全解析:
g++中的局部静态变量的初始化机制及线程安全
主要介绍了Java静态和非静态成员变量初始化过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...
源码演示了易语言静态变量的用法。是易语言初级例程,
我们大家都知道,对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器。我们也可以通过下面的测试代码来验证这一点:
易语言静态变量初始化源码
我们知道类的生命周期分为装载、连接、初始化...这种情况比较特殊,主要问题是由于静态变量是一个对象的引用,那么必须初始化这个对象之后才能将引用指向它。因此如果要把一个引用定义成static的,必须在定义的时候对其