考虑这段代码:
final MyClass myObject;
try {
myObject = new MyClass(...)
} catch (MyClassException){
// terminate
System.exit(1);
}
myObject.doSomething();
问题是 Netbeans 编辑器/解析器认为 .doSomething()
可以在未初始化的对象上调用,当然,事实并非如此。
是否有规避此问题的正常/标准模式?我可以调用一个函数,但不想那样做。我也不想将整个 block 包含在 try catch block 中,因为没有其他东西会抛出 MyClassException
我(还 ;-) )不是 Java 语法和模式方面的专家,所以希望我遗漏了一些明显的东西。
最佳答案
您在 try
block 中初始化您的对象,这可能会抛出异常,使对象未初始化。
在您的 catch
block 中,您停止了程序,但是 System.exit(1)
并没有停止方法执行,而是 terminates currently running JVM - 对于编译器来说,它只是抛出异常时调用的另一种方法。
return
实际上停止了方法的执行 - 所以没有到达 return;
之外的代码。
您可以按如下方式修改您的 catch
block :
catch (MyClassException){
// terminate
System.exit(1);
return;
}
编译器不会提示 myObject
没有以这种方式初始化。
编辑
注意:如果您将 myObject.doSomething();
放在 finally
block 中,编译器会报错,因为 finally
甚至在 之后执行>返回
。
finally {
// compiler error
myObject.doSomething();
}
关于java - Netbeans Java 提示最终变量未被初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16809136/