java - Netbeans Java 提示最终变量未被初始化

标签 java netbeans

考虑这段代码:

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/

相关文章:

java - Glassfish 与 JDeveloper 的集成

java - 我在 NetBeans 上隐藏了一个 "toolbar"面板,我不知道如何再次激活它

java - Spring 存储库并不总是抛出 DataIntegrityViolationException

java - 如何从 JSTL 中的索引作为变量访问 List 对象?

javax.jms.JMSSecurityException : MQJMS2008: failed to open MQ queue

java - Jade 消息队列 - Eclipse

java - 项目监听器错误

netbeans - 在 NetBeans 中格式化 : CSS specific

java - 将数组的内容添加到组合框

php - 当我尝试使用 <?php echo $id ?> 时,netbeans php 中属性 id "no whitespace"的错误值?