Java 7中多异常捕获的使用

Java 7中多异常捕获的使用,java,exception,try-catch,Java,Exception,Try Catch,除了分组类似的异常类型之外,在一个catch块中处理多个异常比使用基本异常类处理它有什么其他优势 为什么选择此选项: try{ //some code } catch(FileNotFoundException e1 | IOException e2){ } 在这个问题上(这不太详细): 捕获泛型异常还将捕获NullPointerException、IndexOutOfBoundsException和其他您通常不想捕获的异常。通过捕获要处理的特定异常,

除了分组类似的异常类型之外,在一个catch块中处理多个异常比使用基本异常类处理它有什么其他优势

为什么选择此选项:

try{
        //some code
    }
    catch(FileNotFoundException e1 | IOException e2){

    }
在这个问题上(这不太详细):


捕获泛型异常还将捕获NullPointerException、IndexOutOfBoundsException和其他您通常不想捕获的异常。通过捕获要处理的特定异常,可以避免这些情况

这两段代码并不相等

第一个只捕获
FileNotFoundException
IOException
及其子类1

第二个异常捕获上述异常以及所有其他已检查异常和所有未检查异常(除了
Error
及其子类)。因此:

  • 您将捕获大量异常,这些异常通常是编程错误导致的;e、 空指针、索引问题等等

  • 您实际上是在“关闭”已检查异常机制,如果您忘记处理某些已检查异常,该机制将导致编译时错误;e、 g.
    SQLException
    。现在,此时您的代码除了捕获的异常(在版本1中)之外,可能不会抛出任何已检查的异常。但是,如果修改代码以调用(比如)抛出SQLException的某个方法,会发生什么呢

    • 使用版本#1。。。编译错误。哦,但你可以解决这个问题
    • 版本为#2。。。没有编译错误。希望您的单元和系统测试足够好,能够解决问题
所以,要回答你的问题

为什么选择[版本1]。。。超过[version#2](这不太详细):

你应该选择正确的,而不是不太详细的。第二个版本将捕获您(可能)不希望被捕获的异常,这使得它不正确

更喜欢第1版



1-请注意,
FileNotFoundException
IOException
的子类,因此您可以重写版本1以仅捕获
IOException
。如果“详细性”是您的主要关注点,那么捕获
IOException
FileNotFoundException
都是冗长的

更重要的是在异常处理方面要高效,你有很多这样做的方法。同时要记住,当你在做一个项目时,无论是大项目还是小项目,都要根据你正在做的事情来尝试使用一些类似的方法

try{


 }(catch Exception e);
例如,在一个使用加密的程序上,你会得到大量的错误,比如

NoSuchAlgorithmException 

InvalidKeyException 
更重要的是,基本异常无法处理它们

当您使用编译器时,每个编译器都是不同的。。。但一般来说,他们都会给你某种形式的警告,基本上是告诉你“嘿,我不会处理这个”

你也会看到你有能力做这样的事情

public setStringExample(string example) throws IOException, Exception, NullPointerExcetptiopn {

 } 
Java在很多方面迫使你解释大多数事情,我想这并不是一件坏事


TL;博士,我想说的总的一点是,异常处理应该正确有效地进行,这是随着时间的推移所学到的,不要试图捕捉到一些不是他们的东西,也不要试图避免捕捉到一些可能是他们的东西

实际上,NoSuchAlgorithmException和InvalidKeyException都是Exception的子类,将被泛型捕获(Exception e)捕获。谢谢,我错过了那个。
public setStringExample(string example) throws IOException, Exception, NullPointerExcetptiopn {

 }