我正在使用beginnersbook.com上的教程来学习Java中的异常处理。
的用途是什么?class Example1 {
public static void main(String args[]) {
int num1, num2;
try {
/* We suspect that this block of statement can throw
* exception so we handled it by placing these statements
* inside try and handled the exception in catch block
*/
num1 = 0;
num2 = 62 / num1;
System.out.println(num2);
System.out.println("Hey I'm at the end of try block");
}
catch (ArithmeticException e) {
/* This block will only execute if any Arithmetic exception
* occurs in try block
*/
System.out.println("You should not divide a number by zero");
}
catch (Exception e) {
/* This is a generic Exception handler which means it can handle
* all the exceptions. This will execute if the exception is not
* handled by previous catch blocks.
*/
System.out.println("Exception occurred");
}
System.out.println("I'm out of try-catch block in Java.");
}
}
此位:
catch (ArithmeticException e) {
/* This block will only execute if any Arithmetic exception
* occurs in try block
*/
System.out.println("You should not divide a number by zero");
}
当catch(Exception e){...}能够处理所有事情时,为什么我们需要这样做?
我能想到的唯一原因是显示您想要/希望显示的消息,因为您不喜欢e.getmessage()
给出的消息。
答案 0 :(得分:1)
此catch
语法允许为更具体的异常引入更具体的错误处理。这是一种不错的语法,因为使用Exception
的catch非常通用,因此如果不存在此if (ex instanceof ArithmeticException)
语法,则必须使用catch
。
一个例子可能是网络错误处理。如果您的客户端代码声明了RetryableException extends NetworkException
,则在捕获RetryableException
时可能要重试客户端操作,但不要重试其他任何NetworkException
。
根据official The catch Blocks docs:
异常处理程序可以做的不仅仅是打印错误消息或暂停程序。他们可以使用链式异常进行错误恢复,提示用户做出决定或将错误传播到更高级别的处理程序,如“链式异常”部分所述。
答案 1 :(得分:0)
就异常处理而言,就良好的编码习惯而言,对于运行时可能发生或可能不会发生的潜在异常,我们应始终首先捕获最接近/最相关的检查异常。 例如对于文件操作,我们将始终使用 FileNotFoundException
第二个catch块可用于可能发生或可能不发生的异常(在执行第一个易受攻击的语句之后)。
以防万一,我们不确定运行时可能发生的异常类型,因此可以在catch块中使用通用 Exception 。
在您的示例中,我想作者想传达两种异常处理功能:
您正在与您的朋友争论,并且可以在您的控制下解决它,因此很明显,您将自己解决该问题,而不是去找父母,让他们为您解决。