0

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

4

1 回答 1

3

如果x()抛出异常,则x变量保持未初始化状态,因为控制流被中断。如果没有 try/catch,异常会不断地在堆栈中上升并且x永远不可用。使用 try/catch,x仅在块内有效,因此如果发生异常,它将无法使用。

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

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

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

于 2010-04-14T04:29:28.567 回答