为什么此方法不会在异常参数中打印消息?

时间:2017-08-25 21:01:20

标签: java exception

我正在编写一个方法,如果可能的话,应该将字符串转换为int,并抛出一个消息不可能的异常。它会抛出异常,但它不会打印消息,这意味着它的行为与注释异常条件时的行为相同:

private static int throwsMethod() throws NumberFormatException{
    Scanner s = new Scanner(System.in);

    System.out.println("enter a number");
    String intNumber = s.next();

    Integer wrapperIntNumberConv = Integer.parseInt(intNumber);

    if(!(wrapperIntNumberConv instanceof Integer)){
        throw new NumberFormatException("can't make an int");
    }

    int fullConvertedNumber = (int) wrapperIntNumberConv;
    System.out.println(fullConvertedNumber);
    return fullConvertedNumber;
}

如果没有try / catch块我怎么能这样做(我试图学习异常并在本练习中没有try / catch块)并让它显示消息?

编辑:azro放入的建议答案没有解决我问题的原因是因为没有任何东西可以添加一个方法,在标题中抛出someException()

2 个答案:

答案 0 :(得分:3)

可能会在此行引发异常:

Integer wrapperIntNumberConv = Integer.parseInt(intNumber);

因为如果字符串不包含可解析的整数,parseInt本身会抛出它。 (Documentation

因此,在这种情况下,该计划无法到达if

你需要在try-catch块中包含parseInt行,以便能够在你的消息中抛出异常:

String intNumber = s.next();
try {
    return Integer.parseInt(intNumber);
catch(NumberFormatException e) { // catch system's exception
    // throw new one with your message
    throw new NumberFormatException("can't make an int");
}

或者,您可以在致电parseInt之前检查字符串是否包含数字(可选的符号和数字):

String intNumber = s.next();
if (intNumber.matches("-?\\d+")) { // see: regular expressions
    return Integer.parseInt(intNumber);
} else {
    throw new NumberFormatException("can't make an int");
}

答案 1 :(得分:-1)

我不确定你想要什么:如果抛出NumberFormatException,它就无法达到打印指令

int fullConvertedNumber = (int) wrapperIntNumberConv;
System.out.println(fullConvertedNumber);
return fullConvertedNumber;

因此不会打印任何信息。

如果你想打印"不能制作一个int"消息,您可以在抛出异常之前或通过try-catch

在调用方法中打印它