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

Rav*_*avi 3 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*iot 5

如果你发现你有几个静态的东西需要一些实例化,或者你有非平凡的工作要做,就像在这种情况下,你可以使用静态初始化块,它们看起来像这样:

class A {

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

    //...
Run Code Online (Sandbox Code Playgroud)

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

private static SClass sc = new SClass();
Run Code Online (Sandbox Code Playgroud)

此外,这里有一个复杂的问题,因为您无法定义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);
    }
}
Run Code Online (Sandbox Code Playgroud)