Java 为什么不调试而不是为什么处理异常

Java 为什么不调试而不是为什么处理异常,java,exception-handling,Java,Exception Handling,我们在try-and-catch中指定了异常。如果我们知道将生成什么异常,为什么要进行异常处理而不仅仅是调试代码的这一部分?否,异常指的是我们无法预见的运行时条件 例如,由于用户输入了错误的数据,所以会出现被零除的错误 所以你用试抓来抓 try { } catch(ArithmeticException){ } 据 异常是在程序执行过程中发生的事件,它会中断正常的指令流 结论: 如果你放了一个try{}catch块,你知道它总是会抛出一个异常,那么你的代码是错误的 例如,这段代码可以编译吗?

我们在try-and-catch中指定了异常。如果我们知道将生成什么异常,为什么要进行异常处理而不仅仅是调试代码的这一部分?

否,异常指的是我们无法预见的运行时条件

例如,由于用户输入了错误的数据,所以会出现被零除的错误

所以你用试抓来抓

try {

}
catch(ArithmeticException){
}

异常是在程序执行过程中发生的事件,它会中断正常的指令流

结论:
如果你放了一个
try{}catch
块,你知道它总是会抛出一个异常,那么你的代码是错误的

例如,这段代码可以编译吗?是的,但这是错误的

String s = "throwMe!";
try {
    int number = Integer.parseInt(s);
} catch (NumberFormatException) {
}

正确的异常使用

System.out.println("Enter a number");
String s = Scanner.....     // user enters something
try {
     int number = Integer.parseInt(s);
} catch (NumberFormatException) {
     // TELL USER THERE IS A PROBLEM
}
// TELL USER IS A GENIUS

这将有两个执行流,正确的一个(用户是genius),但当用户输入一个中断流的值(
Integer.parseInt(s);
)时,就会抛出异常…

您不必进行异常处理或调试,您可以同时进行这两个操作,良好的异常处理有助于您以后调试代码

如果没有其他问题,一个
catch
块应该打印堆栈跟踪,它可以为您提供有关代码哪里出了问题的信息,这比默默失败然后手动调试整个代码来搜索问题要好得多


也可以使用异常来处理错误。

Try/catch块用于无法预见的错误。空指针和被0除错误之类的错误不需要try-catch块。这些东西通常是程序员的错误,应该由程序员调试。但像IOException或SQLException这样的东西,当你与其他系统接口时,可能会出现故障或提供程序员无法控制的无效输入,这些东西需要一个try/catch块。

“如果我们知道将生成什么样的异常”——可能并不总是正确的,不是吗?想象一下一个对文件持有锁的进程。现在你试着用那个文件做点什么。您将得到一个
IOException
,然后您可以决定程序的行为。您希望如何调试这样的场景?