【问题标题】:What will happen if we try to handle one type of exception with a different type of exception class and why?如果我们尝试用不同类型的异常类处理一种类型的异常会发生什么,为什么?
【发布时间】:2021-05-06 14:24:08
【问题描述】:
public class TryCatchExample8 {  

public static void main(String[] args) {  
    try  
    {  
    int data=50/0; //may throw exception   

    }  
        // try to handle the ArithmeticException using ArrayIndexOutOfBoundsException  
    catch(ArrayIndexOutOfBoundsException e)  
    {  
        System.out.println(e);  
    }  
    System.out.println("rest of the code");  
}  
}  

我从一个网站得到这个代码。他们使用不同类型的异常类 (ArrayIndexOutOfBoundsException) 处理生成的异常 (Arithmetic Exception)。 它在输出中显示了这一点,

“线程“主”java.lang.ArithmeticException中的异常:/为零 在 TryCatchExample8.main(TryCatchExample8.java:6)"。

如果我们试图捕获 ArrayIndexOutOfBoundsException,它会如何显示?

【问题讨论】:

  • 您可以做的第一件事就是尝试一下。这将为您提供一些有用的信息,您可以使用这些信息进行更深入的挖掘。
  • 如果您的问题是“这段代码是做什么的”,那么运行它并查看会更快。

标签: java oop


【解决方案1】:

由于这两个异常都是 RuntimeException,因此在编译时无法控制实际引发捕获的异常。

在这种情况下,代码根本不会捕获 ArithmeticException,因此不会有输出到该程序,因为所有打印都在 catch 中或在抛出异常之后(而不是捕获)。

【讨论】:

  • 但它在输出中显示了这一点,“线程中的异常“main”java.lang.ArithmeticException:/在 TryCatchExample8.main(TryCatchExample8.java:6) 处为零”。如果我们试图捕获 ArrayIndexOutOfBoundsException,它是如何做到的?
  • @Yann TM 是对的。您的代码没有处理异常,而是 java 虚拟机“处理”了它。实际上,异常未处理...
  • 主方法之外的未捕获异常会产生(错误)输出。这就是您所看到的,该异常没有被捕获,因为它不是“instanceof ArrayIndexOutOfBoundsException”,这就是 catch 子句的工作方式(测试 instanceof)
  • 换句话说,如果您删除代码中的 try catch,您将得到完全相同的结果。它什么也没做。
猜你喜欢
  • 2011-01-19
  • 2018-04-01
  • 2016-07-04
  • 1970-01-01
  • 2012-04-07
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
相关资源
最近更新 更多