java - 作业: Why is catch being bypassed?

标签 java try-catch

我有以下代码:

public static String userInput(Scanner input) {
    String date = "";
    int year = 0;
    try{
        System.out.print("Please enter a date (mm/dd/yyyy): ");
        date = input.next();            
        boolean leapYear = getLeapYear(date);               
        boolean dateCheck = checkDate(date,leapYear);
        if(dateCheck == true) {
            return date;
        }           
    } catch(IllegalArgumentException e) {
        System.out.println(year + " " + "is not a leap year");

    }
    return date;                
}   

我已通过调试验证,当我输入非闰年日期(例如 02/29/1601)时,dateCheck 为 false。我认为会发生的是,当 if 语句为 false 时,程序将继续捕获。相反,它完全跳过捕获并转到返回日期。我哪里出错了?

最佳答案

Catch 仅在 try 主体抛出 Exception 时运行(在您的示例中仅抛出 IllegalArgumentException)。如果您希望代码始终运行,则应将其放在 finally block 中。 -

try{
    System.out.print("Please enter a date (mm/dd/yyyy): ");
    date = input.next();            
    boolean leapYear = getLeapYear(date);               
    boolean dateCheck = checkDate(date,leapYear);
    if(dateCheck == true) {
        return date;
    } else {
        // what you seem to have expected.
        throw new IllegalArgumentException("not a leap year");
    }        
} catch(IllegalArgumentException e) {
    System.out.println(year + " " + "is not a leap year");
} finally {
    System.out.println("This will always print.").
}
return null;             

关于java - 作业: Why is catch being bypassed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25430892/

相关文章:

c# - 主要方法代码完全在 try/catch : Is it bad practice? 中

swift - 在 Swift 中执行 map 时跳过项目?

python - 为什么这个 `try` 语句没有捕获这个 `CannotSendRequest` 错误? Python

c# - 我应该用 try-catch 语句附上什么类型的代码块?

java - 如何将 GraphView 添加到 android 中的滚动 Pane 中?

java - 将 int 转换为 byte 时出现 BufferOverflowException

java - 拦截并重新抛出 Java 未处理的异常

php - 我可以在将 html 文件加载到 DOMDocument 时 try catch PHP 警告吗?

java - sleep 中断异常 : java. lang.InterruptedException: sleep 中断 - 如何给浏览器超时 40 分钟

java - setOnScrollListener 无限循环并加载而不在 GridView 中滚动?