如果抛出RunTimeException但未捕获,则返回类型值

时间:2010-04-14 04:21:52

标签: java exception gson

我使用Gson来解析Json。如果你没有抓住Runtime Exception,我不明白返回类型是什么。我希望它是null,但在使用简单的null语句进行评估时,它不是if

我的代码看起来像这样:

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为null,但这不是因为没有调用print语句? x的价值是多少?我已经通过在x()函数中使用catch块并从catch块中返回null来解决了我的问题。但我只是想知道函数x()的值是什么(如果有的话)?希望我有任何意义。

1 个答案:

答案 0 :(得分:3)

如果x()抛出异常,x变量仍然未初始化,因为控制流已中断。如果没有try / catch,异常会继续上升,x永远不可用。使用try / catch,x仅在块内有效,因此如果发生异常,它将无法使用。

如果您尝试执行以下操作:

X x;
try {
    x = x();
} catch(RuntimeException e) {}
if (x == null) {
    ...

您将收到错误“变量x可能尚未初始化”,因为控制流可以绕过分配