静态对象应该在Java中构建在哪里?

时间:2011-05-25 03:58:20

标签: java

在下面的代码中,应该在哪里构建sc?如果没有“sc = new SClass()”这一行,我会得到一个空指针异常,但我不确定它是否适合它。我尝试使用静态初始化程序块,但这给了我一个编译器错误。

第二个问题是,是否有关于此类静态初始化的文档?我只能找到对静态基元的引用,而不是静态对象。

class A {
    private class SClass{
        String s;
        String t;
    }

    private static SClass sc;

    public void StringTest() {
        sc = new SClass();
        sc.s = "StringTest";
        System.out.println(sc.s);
    }
}

public class Test {
    public static void main(String[] args) {
        A a = new A();
        a.StringTest();
    }
}

1 个答案:

答案 0 :(得分:5)

如果您发现有几个静态的东西需要进行实例化,或者您有非常重要的工作要做,就像在这种情况下,您可以使用static initializer块,它们看起来像这样:

class A {

    static {
        sc = new SClass();
        sc.s = "StringTest";
        System.out.println(sc.s);
    }

    //...

您还可以在更简单的情况下为其声明它的位置:

private static SClass sc = new SClass();

此外,这里有一个复杂的问题,因为您无法将SClass定义为静态类,但您打算静态使用它。内部类应该有一个静态限定符,下面的代码应该起作用:

class A {
    private static class SClass{
        String s;
        String t;
    }

    private static SClass sc;

    static {
        sc = new SClass();
        sc.s = "StringTest";
        System.out.println(sc.s);
    }
}