7

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

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

5 回答 5

7

问题是由这样一个事实引起的,这UnknownInputException可能是一个嵌套类,如果你用new运算符实例化它,作为一个嵌套类,它应该可以访问一个“父”对象——因为类被实例化,所以它不存在在静态环境中。有关这方面的更多信息,请参阅返回内部类的静态方法

一个可能的解决方案是这样UnknownInputException声明static

private static class UnknownInputException extends Exception { ... }

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

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

于 2012-07-03T14:07:56.153 回答
2

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

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

必须使用另一种this导致错误的静态方法。

于 2012-07-03T14:04:00.580 回答
2

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

于 2012-07-03T14:15:11.663 回答
0

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

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

于 2012-07-03T14:05:44.883 回答
0

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

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

于 2012-07-03T14:06:10.400 回答