我创建了自己的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);
}
}
}
有人可以告诉我,我必须在哪里写什么?
答案 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
文件中声明它。
现在的方式,MyException
是Main
的内部类,需要初始化Main
的实例。
throw new Main().new MyException("i must not be 0");
编辑完成后,显然一切正常......
答案 2 :(得分:1)
这是一个普遍的问题:您的类MyException
是您的Main
类的嵌套类,它始终包含对其封闭实例的引用。您也希望制作该异常类static
。
或者,通常但在这种情况下可能不是,您可以使用外部类的实例来实例化内部类:
Main m = new Main();
throw m.new MyException();
是的,这是一个新的点后。