使用illegalargumentexception检查方法参数是否为null

时间:2015-01-18 00:55:14

标签: java templates exception

我正在尝试在b为null时打印异常消息。但是,当我运行程序并输入任何内容并按回车键时,它仍然等待。如果我输入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)

1 个答案:

答案 0 :(得分:0)

一般情况下,如果不至少阅读一次文档,就不应该使用任何Java方法。

documentation for the Scanner.nextInt方法说:

  

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

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

  

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

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

正如文档所述,字母字符无法转换为有效的int值(默认基数为10),因此当您输入类似&#34; null&#34;它正在抛出一个InputMismatchException,就像它承诺的那样。

您的insert方法与此无关。

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