我正在用Java做一些基本的异常处理。我向用户询问一个数字,当用户提供不同类型的输入时,我会发现输入不匹配错误,例如当他/她输入字符串或字符而不是数字时。
我的问题/问题是当我捕获异常或IOException时,消息返回为“null”的原因。当然,异常的类型是非常明确的,但我会发现任何异常都会给出更有意义的消息。是否将“null”作为常见消息或至少不是唯一的输入不匹配错误?
这是我的主要方法的代码
Scanner kb = new Scanner(System.in);
int y;
try
{
System.out.println("Input a number:");
y = kb.nextInt();
}
catch(Exception e) //also tried IOException, but still got "null" as message
{
System.out.println("Error: " + e.getMessage());
System.out.println("Type of exception: " + e.toString());
}
答案 0 :(得分:1)
当您需要知道Java类的功能时,请始终使用JavaDoc。
JavaDoc说Scanner.nextInt()可以抛出这些异常:
InputMismatchException - if the next token does not match the Integer regular expression, or is out of range
NoSuchElementException - if input is exhausted
IllegalStateException - if this scanner is closed
如果您查看JavaDoc中的这三个异常,您会发现它们都不是IOException
的子类。他们最具体的共同祖先是RuntimeException
。
现在看看InputMismatchException
。 JavaDoc显示它有两个构造函数 - 一个带有消息,一个带有任何内容。后者:
构造一个InputMismatchException,并将null作为其错误消息字符串。
因此,您无法保证InputMismatchException.getMessage()不会返回null。在这种情况下,你已经发现,这就是它的作用。
答案 1 :(得分:0)
您必须通过源代码才能找到它。 Scanner#nextInt()
调用Scanner#nextInt(int)
调用Scanner#next(Pattern)
,如果它在流中找不到与提供的整数匹配的标记,则会InputMismatchException
没有message
Pattern
。
确切的执行流程将InputMismatchException
null
message
InputMismatchException
。还有其他流程会使message
与实际{{1}}一起投放。