Java异常:为什么我的程序没有终止?

时间:2014-02-21 09:04:41

标签: java exception

当我运行简单的代码并输入 char 而不是应该输入的整数值时。 下面列出的程序应该在打印“错误后输入整数值后终止。

但是这段代码也在错误

出现后打印了这一行
import java.util.InputMismatchException;
import java.util.Scanner;

public class Test { 
    public static void main(String[] args) {
        System.out.println("enter value integer ");
        Scanner sn = new Scanner(System.in);
        try{
            int a = sn.nextInt();
        } catch (InputMismatchException ex){
            System.out.println("error please enter integer value");
        }
        System.out.println("not terminating");
    }
}

5 个答案:

答案 0 :(得分:0)

它正在终止,它首先打印出System.out。这是预期的 - 它跳入catch块,然后继续。

答案 1 :(得分:0)

  

但是这段代码,也是在发生错误后打印行

因为它不在try-catch的一边,所以这是异常处理的优势。

异常处理可防止由于运行时错误导致程序异常终止。这就是发生的事情。

另见

答案 2 :(得分:0)

    System.out.println("enter value integer ");
    Scanner sn = new Scanner(System.in);
    try {
        int a = sn.nextInt();
    } catch (InputMismatchException ex) {
        System.out.println("error please enter integer value");
        // you are catching input mis match here 
        // exception will catch and program continues
    }
    System.out.println("not terminating"); // this is out side the try-catch

所以你也会在你的出局中得到这条线。

答案 3 :(得分:0)

进入catch块后,流程继续,因此下一行要执行的是底部打印。

如果您想在catch

内终止
try {
    int a = sn.nextInt();
} catch (InputMismatchException ex) {
    System.out.println("error please enter integer value");
    return; // program will end
}

答案 4 :(得分:0)

如果你希望终止它,你需要重新抛出异常,例如:

System.out.println("enter value integer ");
Scanner sn = new Scanner(System.in);
try {
    int a = sn.nextInt();
} catch (InputMismatchException ex) {
    System.out.println("error please enter integer value");

    throw new RuntimeException(ex);
}

System.out.println("not terminating"); // this is out side the try-catch

这样就不会打印最后一个系统输出,而是会得到一个堆栈跟踪。