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?

最佳答案

(假设您实际上使用类声明声明了Example1Exception,并且方法声明也已修复...)

Example1Exception是一个内部类-它需要对外部类的封闭实例的引用。

选项:


提供参考(但是为什么?)
通过将声明更改为包含static,使其成为嵌套(但非内部)类
成为顶级课程


就我个人而言,我通常会选择最后一个选项-为什么您仍要使其成为嵌套类?为什么将它们放在单独的文件中没有意义?通过将其作为嵌套类,除了带来一堆复杂性之外,您还能获得什么?您是否真的要人们声明catch (Example1.Example1Exception ex) { ... }

如果您确实希望将其嵌套,则可能只希望它是一个非内部类-您未在使用对Example1实例的隐式必需引用。

10-07 13:09