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

时间:2015-11-26 05:40:54

标签: java exception try-catch

我有以下设计代码:

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块重新抛出捕获的异常。然而,编译器说"不兼容的类型"和" Throwable"需要。为什么会产生这个错误?

4 个答案:

答案 0 :(得分:10)

只需更改Exception to Exception1.

中的班级名称即可

看起来名称冲突问题。

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

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

答案 1 :(得分:3)

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

只需使用java.lang.Exception

更改Exception
catch(java.lang.Exception ae)

或者更改隐藏java.lang.Exception

的班级名称

答案 2 :(得分:0)

试试这个

将您的班级名称从“例外”更改为另一个用户定义名称。

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

java中的

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

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

答案 3 :(得分:-1)

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

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