我有以下代码:
public class StaticKindOfThing {
static int a =getValue();
static int b = 10;
public static int getValue()
{
return b;
}
public static void main (String []args)
{
System.out.println(a);
}
}
我知道默认变量设置为0,但是不是在运行时发生的吗?从上面的代码看,默认初始化为0发生在运行时之前..否则getValue应该给出编译错误或运行时异常,而不是查找值。
所以我的问题是。变量static int b = 10;
在编译时是否获得0默认值?
答案 0 :(得分:2)
它获得你提供的值,即10.静态变量在运行时加载
当您启动JVM并加载类StaticKindOfThing时,静态块或字段(此处a,b)将被“加载”到JVM中并可以访问。
来自here: -
- 它是属于类的变量而不是对象(实例)
- 静态变量仅在执行开始时初始化一次。
- 在初始化任何实例变量之前,将首先初始化这些变量
- 要由班级的所有实例共享的单个副本
- 静态变量可以由类名直接访问,不需要任何对象
修改: - 强>
答案 1 :(得分:1)
不,它获得了你提供的价值,即10。
在你的情况下,即使你写:
static int a;
结果为0
。因为你没有给出任何价值。
有时你可以写static
块像:
static {
//...
}
确保在启动课程之前该块首先运行。
当类像静态变量一样加载到JVM中时,静态初始化程序块只执行一次。
试试这个会做你想象的那个:
public class StaticKindOfThing {
static int a;
static int b = 10;
static{
a = getValue();
}
public static int getValue()
{
return b;
}
public static void main (String []args)
{
System.out.println(a);
}
}
输出:10