2

我有以下代码:

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 默认值?

4

2 回答 2

2

它获取您提供的值,即 10。静态变量在运行时加载

当您启动 JVM 并加载类 StaticKindOfThing 时,静态块或字段(此处为 a,b)被“加载”到 JVM 中并变得可访问。

这里:-

  • 它是一个属于类而不属于对象(实例)的变量
  • 静态变量只在执行开始时初始化一次。
  • 这些变量将首先被初始化,在初始化任何实例变量之前
  • 由类的所有实例共享的单个副本
  • 静态变量可以通过类名直接访问,不需要任何对象

编辑:-

请通过详细的初始化程序

于 2013-09-01T12:06:04.737 回答
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

于 2013-09-01T12:05:01.323 回答