在下面的代码中,应该在哪里构建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();
}
}
答案 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);
}
}