为什么 catch 块会产生编译器错误?

Why does the catch block produce a compiler error?

我有以下人为设计的代码:

class Exception
{
    public static void main(String args[])
    {

        int x = 10;
        int y = 0;

        int result;

        try{
            result = x / y;
        }
        catch(ArithmeticException e){
            System.out.println("Throwing the exception");
            throw new ArithmeticException();
        }
        catch(Exception ae){
            System.out.println("Caught the rethrown exception");
        }
    }
}

第一个 catch 块重新抛出被捕获的异常。然而,编译器说需要 "Incompatible Types" 和 "Throwable"。为什么会产生这个错误?

只需将您的 class 名称从 Exception to Exception1.

更改

看起来像是名称冲突问题。

您的命名约定策略反对 Java 标识符定义规则。

意思是,你不能给出图书馆已经给出的名字。在这里,class 姓名。

当函数可以抛出异常时,您需要在函数头中声明。

https://docs.oracle.com/javase/tutorial/essential/exceptions/declaring.html

您的 Exception class 正在隐藏 java.lang.Exception 并且您正试图将自己的 class 作为异常抛出。您应该抛出一个扩展 java.lang.Exception class.

的对象

只需将 Exception 更改为 java.lang.Exception

catch(java.lang.Exception ae)

或者更改隐藏 java.lang.Exception

的 class 的名称

试试这个

将您的 class 名称从 Exception 更改为另一个用户定义的名称。

这是名称冲突问题,因为 Exception 是内置的

class in java 所以你不能在你的源代码中给出相同的名字。

就像在java中不能使用关键字作为标识符一样。 Exception 不是关键字,但它已经用作 class 标识符。