何时初始化静态字段?如果我从不实例化一个类,但是我访问一个静态字段,是否所有静态块和私有静态方法用于实例化那个时刻调用的私有静态字段(按顺序)?
如果我调用静态方法怎么办?它是否也运行所有静态块?方法之前?
可能重复:
Java静态类初始化
为什么字符串变量在初始化块中更新而不是整数(即使先写入块)
class NewClass
{
static
{
System.out.println(NewClass.string+" "+NewClass.integer);
}
final static String string="static";
final static Integer integer=1;
public static void main(String [] args)//throws Exception
{
}
}
Run Code Online (Sandbox Code Playgroud)
我的输出是
static null
Run Code Online (Sandbox Code Playgroud)
PS:还注意到只有当我插入final修饰符时,字符串变量初始化才会发生在块之前.为什么会这样?为什么不是整数?我已经将它声明为最终静态
想象一下Java类,它具有您可以在类中找到的大多数功能.例如:它继承自另一个类,实现了几个接口,包括一些'静态最终'常量,一些最终常量,一些静态变量,实例变量,一个静态块,一个未命名的代码块(只是{}中的代码),构造函数,方法等
当有问题的类第一次加载到JVM中时,类的各个部分以什么顺序初始化或加载到JVM中?JVM中的调用堆栈对于加载是什么样的?假设只有一个类加载器在这里工作.
这可以追溯到Java的绝对基础/内部,但我还没有找到一篇解释正确序列的好文章.