我使用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()
的值是什么(如果有的话)?希望我有任何意义。
答案 0 :(得分:3)
如果x()
抛出异常,x
变量仍然未初始化,因为控制流已中断。如果没有try / catch,异常会继续上升,x
永远不可用。使用try / catch,x
仅在块内有效,因此如果发生异常,它将无法使用。
如果您尝试执行以下操作:
X x;
try {
x = x();
} catch(RuntimeException e) {}
if (x == null) {
...
您将收到错误“变量x可能尚未初始化”,因为控制流可以绕过分配