当前位置: 首页 > 面试题库 >

如何避免出现“本地变量可能尚未初始化”的Java编译错误?(是的,很认真!)

孟昊空
2023-03-14
问题内容

在您说这个问题已经被无数次回答之前,这是我的代码片段:

final int x;
try {
    x = blah(); 
} catch (MyPanicException e) {
    abandonEverythingAndDie();
}
System.out.println("x is " + x);

如果调用abandonEverythingAndDie()具有结束整个程序执行的作用(例如,因为它调用System.exit(int)),那么x无论何时使用它,总是将其初始化。

当前的Java语言中是否有一种方法可以通知编译器abandonEverythingAndDie()它永远不会将控制权返回给调用者,从而使编译器对变量初始化感到满意?

想要

  • 删除final关键字
  • x在声明时初始化,
  • 也不要将放在块println的范围内try...catch

问题答案:

通过向编译器提供一些额外的信息来欺骗一些用户:

final int x;
try {
    x = blah();
} catch (MyPanicException e) {
    abandonEverythingAndDie();
    throw new AssertionError("impossible to reach this place"); // or return;
}
System.out.println("x is " + x);

您还可以使abandonEverythingAndDie()return某个东西(仅从语法上讲,它当然永远不会返回),然后调用return abandonEverythingAndDie()

final int x;
try {
    x = blah();
} catch (MyPanicException e) {
    return abandonEverythingAndDie();
}
System.out.println("x is " + x);

和方法:

private static <T> T abandonEverythingAndDie() {
    System.exit(1);
    throw new AssertionError("impossible to reach this place");
}

甚至

throw abandonEverythingAndDie();

private static AssertionError abandonEverythingAndDie() {
    System.exit(1);
    throw new AssertionError("impossible to reach this place");
}


 类似资料:
  • 问题内容: 当我尝试编译时: 我得到这些错误: 在我看来,我在方法的顶部初始化了它们。怎么了 问题答案: 你声明了它们,但没有初始化它们。初始化它们是将它们设置为等于一个值: 因为未初始化变量,但在循环中增加了变量(例如),因此会收到错误消息。 Java原语具有默认值,但如下一位用户所述 当声明为类成员时,它们的默认值为零。局部变量没有默认值

  • 我正在研究Euler Problem 9项目,其中说明: 毕达哥拉斯三元组是由三个自然数组成的集合 例如,3^2 4^2=9 16=25=52。 确实存在一个毕达哥拉斯三重态,其bc=1000。查找产品abc。 以下是我到目前为止所做的: 当我运行代码时,会出现以下错误: 注意:我的每个变量(a、b和c)都有不同的行号。 我想当我声明a、b和c为整数时,如果不赋值,默认值是0。 即使不是这样,在我

  • 问题内容: 我有一个方法创建一个,另一个方法更改字符串 我的编译器说它“可能尚未初始化”。 有人可以解释吗? 问题答案: 变量可能尚未初始化 在内部定义方法时,必须在其中初始化程序的每个变量中必须先使用一个值的地方。 同样重要的是,您的代码将永远无法正常运行,因为Java中的字符串是不可变的,因此您无法编辑字符串,因此应更改方法。 我将您的代码更改为类似的内容,但是我认为您的编辑方法应该做另一件事

  • 我不知道这段代码有什么问题,也不知道为什么会出现错误: 变量isPrime可能尚未初始化 这是完整的代码:

  • 我创建了包含构造函数和toString方法的类主管。但是,当我试图打印数组的索引时,出现了一个错误,“变量svArray可能尚未初始化。我该如何解决这个问题?”?

  • 问题内容: 请考虑以下方法: 在我得到“本地变量可能尚未初始化”错误。显然,x永远不会未经初始化就使用。除了初始化x之外,还有什么方法可以抑制警告?谢谢。 问题答案: 不,Java无法检查程序的所有可能代码路径来确定变量是否已初始化,因此它采取了安全路线并发出警告。 因此,不行,您将必须初始化变量来摆脱这种情况。