Netbeans Java抱怨最终变量没有被初始化

Bat*_*eba 3 java netbeans

考虑以下代码:

final MyClass myObject;
try {
    myObject = new MyClass(...)
} catch (MyClassException){
    // terminate
    System.exit(1);
}

myObject.doSomething();
Run Code Online (Sandbox Code Playgroud)

问题是Netbeans编辑器/解析器认为.doSomething()可以在一个单元化对象上调用,当然,情况并非如此.

有没有正常/标准的模式来规避这个?我可以调用函数但不愿意这样做.我还宁愿不将整个块包含在try catch块中,因为没有别的东西会抛出MyClassException

我不是(还是;-))Java语法和模式方面的专家,所以我希望我遗漏了一些明显的东西.

Vla*_*mir 5

您在try块中初始化对象,这可能会抛出异常,使对象未初始化.

在你的catch块中,你停止你的程序,但System.exit(1)不会停止方法执行,而是终止当前运行的JVM - 而对于编译器,它只是在抛出异常时调用的另一种方法.

return实际上会停止执行方法 - 因此不会超出任何代码return;.您可以catch按如下方式修改块:

catch (MyClassException){
    // terminate
    System.exit(1);
    return;
}
Run Code Online (Sandbox Code Playgroud)

编译器不会抱怨myObject没有以这种方式初始化.

编辑

注意:如果你myObject.doSomething();输入finally块编译器会抱怨,因为finally即使在执行之后也是如此return.

finally {
    // compiler error
    myObject.doSomething();
}
Run Code Online (Sandbox Code Playgroud)