繁体   English   中英

为什么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块重新抛出捕获的异常。 然而,编译器要求“不兼容类型”和“可投掷”。 为什么会出现此错误?

只需将您的类名从Exception to Exception1.更改Exception to Exception1.

它看起来像名称冲突的问题。

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

意思是,你不能给出已经由图书馆给出的名字。 这里,班级名称。

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

只需使用java.lang.Exception更改Exception

catch(java.lang.Exception ae)

或者更改隐藏java.lang.Exception类的名称

尝试这个

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

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

java中的类,因此您不能在源代码中使用相同的名称。

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

当一个函数可以抛出异常时,你需要在函数头中声明它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM