Example1Exception和Example1Method属于同一个文件。将它们放在单独的文件中是没有意义的。
public class Example1
{
public class Example1Exception extends Exception
{
public Example1Exception(String message)
{
super(message);
}
}
public static void Example1Method() throws Example1Exception
{
throw new Example1Exception("hello"); //error: non-static variable this cannot be referenced from a static context
}
}
如何在Example1Method中抛出Example1Exception?
答案 0 :(得分:11)
(假设您实际使用类声明声明Example1Exception
,并且方法声明也已修复...)
Example1Exception
是内部类 - 它需要引用外部类的封闭实例。
选项:
static
就我个人而言,我通常会选择最后一个选项 - 为什么想要它仍然是一个嵌套类?为什么将它们放在单独的文件中没有意义?除了一堆复杂性之外,将它作为嵌套类进行获得是什么?你真的希望人们宣布catch (Example1.Example1Exception ex) { ... }
如果真的希望它嵌套,你可能只是希望它是一个非内部类 - 你不是使用隐含必需的引用Example1
的实例。
答案 1 :(得分:0)
使异常类成为静态:
public static class Example1Exception extends Exception
{
public Example1Exception(String message)
{
super(message);
}
}
答案 2 :(得分:0)
如果您真的想这样做,这就是代码:
public class Example1 {
public class Example1Exception extends Exception {
public Example1Exception(String message) {
super(message);
}
}
public static void Example1Method() throws Example1Exception {
throw new Example1().new Example1Exception("hello");
}
}
但是就像其他人已经说过的那样:将Exception声明为内部类是没有多大意义的。