我有一个返回String的静态方法,但是如果传入的字符串与多个单词之一不匹配,我想抛出异常。下面的代码只是我尝试做的一个示例,但我不断得到“非静态变量,这不能从静态上下文引用”消息,我抛出异常的行。基本上,getMsg的返回值必须有效,否则程序无法继续,所以我需要一种方法来捕捉它。
public static String getMsg(String input) throws UnknownInputException{
if (input.equals("A")){
return "key for A";
}
throw new UnknownInputException("Some Message");
return "unknownInput";
答案 0 :(得分:5)
问题是由UnknownInputException
可能是嵌套类的事实引起的,如果使用new
运算符实例化它,作为嵌套类,它应该可以访问“父类” “对象 - 自从类在静态上下文中实例化以来不存在。有关此问题的详细信息,请参阅Static method returning inner class。
一种可能的解决方案是将UnknownInputException
声明为static
,如下所示:
private static class UnknownInputException extends Exception { ... }
当然,您将无法访问此类中的任何实例(非静态)方法和/或字段,但在您的情况下这可能不是问题(特别是在Exception类的情况下)。
此外,return
行之后的throw
值是不必要的,因为执行永远不会到达该行。
答案 1 :(得分:2)
在给定的示例代码中未记录变量 this ,因此不会导致错误。
代码return "unknownInput";
是永久性的,因为从未执行过。
必须有另一个使用this
的静态方法,这会导致错误。
答案 2 :(得分:2)
UnknownInputException是一个内部类。一旦我把它变成静态的,代码编译得很好。谢谢你的帮助。
答案 3 :(得分:0)
在java中从静态方法中抛出异常是完全合法的。 但是你在这里展示的代码甚至无法编译:) 所以提供所有代码。
你在这里得到的错误只是说你正在使用静态方法在类上定义的非静态数据字段。 静态方法不属于任何实例,但数据字段确实...
答案 4 :(得分:0)
首先,永远不会执行return "unknownInput";
行。是不是在那里显示死密码警告?
你的方法没有任何'this'参考,你确定它抱怨这个方法吗?