【问题标题】:why to use multiple catches in exception?为什么要在异常中使用多个捕获?
【发布时间】:2020-04-11 23:55:03
【问题描述】:

当我们可以在单个默认异常中处理它时,为什么我们应该使用 多次捕获?

public static void main(String[] args) {  

       try{    
            int a[]=new int[5];    
            a[5]=30/0;    
           }    
           catch(ArithmeticException e)  
              {  
               System.out.println("Arithmetic Exception occurs");  
              }    
           catch(ArrayIndexOutOfBoundsException e)  
              {  
               System.out.println("ArrayIndexOutOfBounds Exception occurs");  
              }    
           catch(Exception e)  
              {  
               System.out.println("Parent Exception occurs");  
              }             
           System.out.println("rest of the code");    
}  

【问题讨论】:

    标签: exception nullpointerexception try-catch indexoutofboundsexception arithmeticexception


    【解决方案1】:

    如果你使用特定的异常,比如说 SqlException,它会处理所有可能的异常代码,但是在 if-else 阶梯中,你需要定义所有可能的场景,你很可能会错过一些他们。

    【讨论】:

      【解决方案2】:

      请从下次开始正确格式化您的问题。尝试添加您尝试解决问题的内容并尽可能多地解释您的方法。

      回到实际答案中,您使用多个异常来为每种类型的异常提供特定的处理机制。

      例如,如果您想单独处理 DivideByZero 异常,例如向用户显示特定消息,您可以通过捕获 DivideByZero 异常来实现,因为您无法使用通用异常执行相同的操作。

      【讨论】:

      • 好的,但是我可以对 If Else 条件也这样做...
      • 喜欢.. 我将在广义异常中捕获,然后在 catch 块中捕获 if(e.Message.equals('尝试除以零') { system.out.print("尝试除以零") }
      • 在广义异常捕获块中使用 if-else 阶梯,会导致性能问题。如果您使用通用异常块,它必须经过大量检查才能找到引发的确切异常。此外,最重要的是,如果您使用 if-else 阶梯,它必须再次执行相同的检查才能到达特定的异常块。这本身就是一个主要的性能问题。这就是我们使用漏斗的原因,其中多个 catch 块将检查一个特定的异常。
      【解决方案3】:

      除此之外,通用异常可以处理所有异常,但随后消息变得通用。在这里,我们需要特定于每种异常类型的消息。

      【讨论】:

      • 如果我在单个 catch 块中使用 If Else 条件会怎样
      猜你喜欢
      • 2017-06-19
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 2011-01-09
      • 2014-11-24
      • 2010-10-27
      • 1970-01-01
      • 2012-08-27
      相关资源
      最近更新 更多