【问题标题】:Can static methods that return a value throw an exception?返回值的静态方法可以抛出异常吗?
【发布时间】:2012-07-03 23:30:50
【问题描述】:

我有一个返回字符串的静态方法,但是如果传入的字符串与多个单词之一不匹配,我想抛出异常。下面的代码只是我正在尝试做的一个示例,但我在抛出异常的行上不断收到“无法从静态上下文引用的非静态变量”消息。基本上,getMsg 的返回值必须有效,否则程序无法继续,所以我需要一种方法来捕捉它。

public static String getMsg(String input) throws UnknownInputException{
      if (input.equals("A")){
           return "key for A";
      }
      throw new UnknownInputException("Some Message");
      return "unknownInput";

【问题讨论】:

  • 此代码与您发布的错误消息不匹配。您需要自己发布实际的错误消息,并让我们知道是哪一行导致的。

标签: java


【解决方案1】:

问题是因为UnknownInputException 可能是一个嵌套类,如果你用new 操作符实例化它,作为一个嵌套类,它应该可以访问一个“父”对象——这不存在,因为该类是在静态上下文中实例化的。有关这方面的更多信息,请参阅Static method returning inner class

一种可能的解决方案是将UnknownInputException 声明为static,如下所示:

private static class UnknownInputException extends Exception { ... }

当然,您将无法访问此类中的任何实例(非静态)方法和/或字段,但这在您的情况下可能不是问题(尤其是在 Exception 类的情况下)。

另外,throw 行之后的returning 值是不必要的,因为执行永远不会到达该行。

【讨论】:

    【解决方案2】:

    变量this在给定的示例代码中没有注明,所以它不会导致错误。

    代码return "unknownInput"; 是多余的,因为从未执行过。

    必须存在另一个使用this 的静态方法,这会导致错误。

    【讨论】:

    • 我明白你关于返回值的观点,但是返回字符串的方法不是必须返回一个值吗??
    • 如果抛出异常或错误则不会。
    • 好的。在我的方法中,我没有使用“this”这个词,所以我不知道为什么会出现编译错误。
    • 我想我忘了将 UnknownInputException 类设为静态,它是一个内部类。现在工作:-)
    【解决方案3】:

    UnknownInputException 是一个内部类。一旦我把它变成静态的,代码编译得很好。谢谢大家的帮助。

    【讨论】:

    • 在 Java 中创建内部异常类是不正常的做法。确实,我不记得有一个著名的 API 可以做到这一点。考虑将其设为顶级类。
    【解决方案4】:

    在java中从静态方法抛出异常是完全合法的。 但是,您在此处提供的代码甚至无法编译:) 所以提供所有代码。

    你在这里得到的错误只是说你正在使用在静态方法的类上定义的非静态数据字段。 静态方法不属于任何实例,但数据字段...

    【讨论】:

      【解决方案5】:

      首先,return "unknownInput"; 行永远不会被执行。那里没有显示死代码警告吗?

      而且你的方法没有任何“this”引用,你确定它抱怨这个方法吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-14
        • 1970-01-01
        • 1970-01-01
        • 2012-12-28
        • 1970-01-01
        • 2018-02-20
        • 1970-01-01
        • 2012-02-09
        相关资源
        最近更新 更多