相关疑难解决方法(0)

为什么静态字段没有及时初始化?

以下代码打印null一次.

class MyClass {
   private static MyClass myClass = new MyClass();
   private static final Object obj = new Object();
   public MyClass() {
      System.out.println(obj);
   }
   public static void main(String[] args) {}
}
Run Code Online (Sandbox Code Playgroud)

为什么在构造函数运行之前没有初始化静态对象?

更新

我只是在没有注意的情况下复制了这个示例程序,我以为我们正在谈论2个Object字段,现在我看到第一个是MyClass字段..:/

java null static nullpointerexception

42
推荐指数
3
解决办法
2万
查看次数

静态变量初始化的顺序,Java

可能重复:
Java静态类初始化
按什么顺序执行的类中的静态块和静态变量?

当我运行这段代码时答案是1,我认为它将是2.初始化的顺序和每一步中k的值是多少?

public class Test {

static {k = 2;}
static int k = 1;

public static void main(String[] args) {
    System.out.println(k);
}
}
Run Code Online (Sandbox Code Playgroud)

编辑1:作为"k设置为默认值"的后续内容,为什么下一个代码不能编译?这是一个错误"无法在定义之前引用字段".

public class Test {

static {System.out.println(k);}
static int k=1;

public static void main(String[] args) {
    System.out.println(k);
}
}
Run Code Online (Sandbox Code Playgroud)

编辑2:对于一些我不知道的原因,当^而不是"k"它的"Test.k"时它起作用.

感谢所有的答案.这将是完美的:D

java static

10
推荐指数
2
解决办法
1万
查看次数

为什么这个Java静态字段为空?

public class StaticTest {

    private static String a;
    private static String b = "this is " + a;

    public static void main(String[] args) {
        a = "test";

        System.out.println(b); // prints "this is null"
    }

}
Run Code Online (Sandbox Code Playgroud)

我对它b的价值感到困惑.我认为结果应该是"这是测试",但结果是"这是空的".为什么?

java

6
推荐指数
2
解决办法
1891
查看次数

标签 统计

java ×3

static ×2

null ×1

nullpointerexception ×1