如何在静态方法中抛出异常,两者都在同一个类中

时间:2014-01-17 13:53:48

标签: java oop

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?

3 个答案:

答案 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声明为内部类是没有多大意义的。