【问题标题】:Check if method argument is null using illegalargumentexception使用非法参数异常检查方法参数是否为空
【发布时间】:2015-01-18 00:55:13
【问题描述】:

当 b 为空时,我正在尝试打印异常消息。但是,当我运行程序并且不输入任何内容并按 Enter 键时,它仍然在等待。如果我输入 null 或任何其他字符串(不是数字,数字可以正常工作),它会给出如下所示的异常

public a<X> insert(X b) {

          if ((b.equals(null))|| (b==null)||(b.equals("null"))||(b.equals("NULL"))){
            throw new IllegalArgumentException("Illegal Argument Exception"); 
        }
        return null;

    }

输入字符串时执行:

Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:909)
    at java.util.Scanner.next(Scanner.java:1530)
    at java.util.Scanner.nextInt(Scanner.java:2160)
    at java.util.Scanner.nextInt(Scanner.java:2119)
    at Q.main(a.java:145)

【问题讨论】:

  • in (b.equals(null))|| (b==null) - b.equals(null) 没有意义。
  • 主要问题不在于条件..它可以更改..问题是当我键入时,例如,当 X 为 int 时,我应该得到非法参数异常,但我得到上面给出的错误信息
  • 您能否分享一个更完整的 sn-p,其中还包括您对 Scanner 的使用?
  • @Sam 如果您输入的不是整数,nextInt() 将抛出 InputMismatchException (documentation)

标签: java templates exception


【解决方案1】:

一般来说,您不应该在未阅读其文档的情况下使用任何 Java 方法。

documentation for the Scanner.nextInt 方法说:

将输入的下一个标记扫描为 int。以nextInt() 形式调用此方法的行为与调用nextInt(radix) 完全相同,其中radix 是此扫描器的默认基数。

因此,如果我们采纳该文档的建议并查看documentation for Scanner.nextInt(int),我们会看到:

将输入的下一个标记扫描为 int。如果下一个标记无法转换为如下所述的有效 int 值,则此方法将抛出 InputMismatchException。

创建 Scanner 时,分隔符是空格(如 documentation for the Scanner class 中所述)。当 Scanner 被要求读取一个值时,它将继续忽略空格,直到遇到不是空格的内容。换行符是空格,这就是扫描仪忽略您按 Enter 的原因。它仍在等待令牌。

正如文档所述,字母字符无法转换为有效的 int 值(默认基数为 10),因此当您输入“null”之类的内容时,它会抛出 InputMismatchException,就像它承诺的那样。

您的insert 方法与此无关。

如果您希望您的代码处理非数字输入,请捕获 InputMismatchException,或使用 next() 而不是 nextInt() 并使用 NumberFormat 自己解析字符串。

【讨论】:

    猜你喜欢
    • 2014-07-04
    • 1970-01-01
    • 2023-03-07
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多