试图抛出自己的异常

时间:2013-09-03 17:24:16

标签: java exception

我创建了自己的throwable异常但是当我想抛出它时,编辑说,需要引用一个封闭类。我不知道,我需要写什么。

这是代码:

public class Main {
    int i = 0;
    public Main() {
        if (i == 0) throw new MyException("i must not be 0"); //Here it says about enclosing class
    }
    public static void main(String[] args) throws Exception {
        new Main();
    }
    public class MyException extends Exception {
        public MyException(String e) {
            super(e);
        }
    }
}

有人可以告诉我,我必须在哪里写什么?

3 个答案:

答案 0 :(得分:2)

您已将MyException定义为Main的内部类,然后创建了一个实例,没有相应的Main实例(因为main方法是静态方法)。

您需要在Main之外单独声明异常类。将访问权限从public更改为package-private将允许您将声明保留在同一文件中。否则,因为每个文件只能有一个公共类,所以它需要放在自己的文件中。

或者,您可以将其定义为静态内部类,如下所示:

public class Main {
    int i = 0;
    public static void main(String[] args) throws Exception {
        if (i == 0) throw new MyException("i must not be 0"); //Here it says about enclosing class
    }

    static class MyException extends Exception {
        public MyException(String e) {
            super(e);
        }
    }
}

使类静态意味着它不引用封闭类的实例。

答案 1 :(得分:1)

MyException类声明为static

public static class MyException extends Exception {
    public MyException(String e) {
        super(e);
    }
}

或者在自己的可编译.java文件中声明它。

现在的方式,MyExceptionMain的内部类,需要初始化Main的实例。

throw new Main().new MyException("i must not be 0");

编辑完成后,显然一切正常......

答案 2 :(得分:1)

这是一个普遍的问题:您的类MyException是您的Main类的嵌套类,它始终包含对其封闭实例的引用。您也希望制作该异常类static

或者,通常但在这种情况下可能不是,您可以使用外部类的实例来实例化内部类:

Main m = new Main();
throw m.new MyException();

是的,这是一个新的点后。

相关问题