我正在使用Gson来解析 Json。我不明白如果你没有捕获 Runtime Exception 返回类型将会是什么。我原以为它是 null
,但在使用简单的 if
语句进行评估时,它不是 null
。
我的代码看起来像这样:
public X x(final String jsonString) {
return gson.fromJson(jsonString, X.class);
}
然后从另一个函数中调用该函数:
public void y() {
final X x = x();
if (x == null) {
System.out.println("x == null");
}
}
我原本期望 x 为空,但这不是因为没有调用 print 语句吗? x
的值是多少?我通过在 x()
函数中使用 catch block 并从 catch block 内部返回 null
解决了我的问题。但我只是想知道函数 x() 的值是什么(如果有的话?)?希望我说得有道理。
最佳答案
如果x()
抛出异常,则x
变量保持未初始化状态,因为控制流被中断。如果没有 try/catch,异常会继续在堆栈中上升,并且 x
永远无法使用。对于 try/catch,x
仅在 block 内有效,因此如果发生异常,它将无法使用。
如果您尝试执行以下操作:
X x;
try {
x = x();
} catch(RuntimeException e) {}
if (x == null) {
...
您将收到错误“变量 x 可能尚未初始化”,因为控制流可以绕过赋值
关于java - 如果已抛出 RunTimeException 但未捕获,则返回类型值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2634863/