Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java catch(异常e)后跟if(异常e实例)_Java_Exception - Fatal编程技术网

Java catch(异常e)后跟if(异常e实例)

Java catch(异常e)后跟if(异常e实例),java,exception,Java,Exception,今天我偶然发现了这段代码 try { ... } catch (Exception e) { if (e instanceof Exception) { ... } else { ... } } if-else分支有意义吗?捕获的异常e是否始终是异常的一个实例?是e始终是异常的一个实例。因此,您发布的代码没有多大意义 即使您希望处理不同的异常,也希望执行以下操作之一(示例): 如果希望以与Java 7相同的方式处理某些异常,可以执行以下操作: c

今天我偶然发现了这段代码

try {
   ...
} catch (Exception e) {
   if (e instanceof Exception) {
      ...
   } else {
      ...
   }
}

if-else分支有意义吗?捕获的
异常e
是否始终是
异常的一个实例?

e
始终是
异常的一个实例。因此,您发布的代码没有多大意义

即使您希望处理不同的异常,也希望执行以下操作之一(示例):

如果希望以与Java 7相同的方式处理某些异常,可以执行以下操作:

catch( IOException | MyUserException e) {
  //same handling for both
}

在java 7之前,您可能遇到以下情况:“代码> catch(异常e)和代码>在catch块内部检查,但应该小心使用这些构造,如果您有更好的选项(即Java 7 +多catch),则应该考虑这些。


最后请注意,像
catch(Exception e)
这样的catch-all表达式可能很有用,但也可能是错误的来源,特别是在处理能力较差的情况下。在大多数情况下,您希望以特定的方式处理预期的异常(例如IOExceptions),并让所有其他异常冒泡。当然,您的代码可能希望在某个点捕获所有未捕获的异常(例如,记录它们),这就是您将使用的
catch(Exception e)
——但是您应该知道其含义以及在这些情况下的操作。

上面的代码没有任何意义,因为e始终是一个对象(实例)异常类的实例。因此,更清楚地说,程序控件将永远不会进入else块,好像(e instanceof exception)将始终为真。

不,这没有任何意义。也许在它成为“SomethingException”之前,他们后来删除了“SomethingException”。这没有意义,在这种情况下,
e
将始终是
异常的一个实例,我肯定会查看源代码管理中的历史,看看最初是什么。我希望像
catch(Throwable e){…}
这样的东西,一个好的优化编译器可能会把其他部分扔掉。但是我们会发现,javac不是那种编译器。
catch( IOException | MyUserException e) {
  //same handling for both
}