在输入不匹配错误期间从“异常”获取“null”作为消息

时间:2013-12-05 15:39:09

标签: java exception

我正在用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());
}           

2 个答案:

答案 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}}一起投放。