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

标签 java exception gson

我正在使用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/

相关文章:

java - Akka 恢复不起作用?即使一切执行正常,仍然抛出异常

mysql - Orika Mapper + Gson (JSON) + MySQL 的异常

java - 从 Hashmap<String,Hashmap> 格式化 JSON

java - 将一个线程置于 sleep 状态,直到另一个线程中的条件得到解决

java - 命令仅在每次重新加载时有效一次

java - Java 中的 Shunting-Yard 算法实现给出了错误的输出和字符串索引超出范围?

java - 如何使用Gson创建多个对象以及如何使用一个JSON文件在Java类中显式引用不同的对象?

java - 是否有 jackson 注释来抑制不必要的 JSON 包装?

java - 新手 Android NullPointerException 故障排除

c# - 如何捕获这种类型的异常?