摘要
异常是指程序不正常,有错误的代码或者潜在的风险。在编写 Java 应用程序的过程中,发生异常是再所难免的。异常对程序员来说是一件非常头疼的事情。但是 Java 可以自动检测异常,并能够捕获异常,可以编写专门的程序来处理异常。
认识异常
在编程时应该尽可能避免错误和异常的产生,对于不可避免或不可预测的情况,Java 使用异常对象来表示。Java 异常的来源有两种:
- Java 在运行时,环境自动抛出系统生成异常(有些是咱们程序员写的bug)。
- 程序员自己抛出的异常。一般是在处理业务逻辑的时候,不满足条件,就使用异常反馈出提示信息。
异常的处理
Java中异常处理流程:
通过异常的处理可以让异常程序具有更好的容错性并增加健壮性。在异常处理时有三个关键字:try、catch、finally。在 finally 块中的代码,是不管前面报错怎么样,一定会执行。
try{
程序代码
}catch(异常类型1 异常变量名1){
程序代码
}catch(异常类型2 异常变量名2){
程序代码
}catch(异常类型3 异常变量名3){
程序代码
}finally{
程序代码
}
代码示例:
public class TestDemo {
public static void main(String[] args) {
System.out.println("1.开始除法计算....");
try {
int x = Integer.parseInt(args[0]);
int y = Integer.parseInt(args[1]);
System.out.println("2.除法计算:" + (x / y));
} catch (ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (ArithmeticException e) {
e.printStackTrace();
} finally {
System.out.println("不管是否异常,我都输出!");
}
System.out.println("3.计算结束....");
}
}
控制台输出:
1.开始除法计算....
java.lang.ArrayIndexOutOfBoundsException: 0
不管是否异常,我都输出!
at TestDemo.main(TestDemo.java:7)
3.计算结束....
访问异常信息
当程序运行时决定调用某个 catch 块时,可以在 catch 块中获取到异常的相关信息。在 Java 中提供了4个常用的方法。
- getMessage():返回该异常的详细描述字符串。
- printStackTrace():将该异常的跟踪栈信息输。
- printStackTrace(PrintStream s):将该异常信息输出到指定的输出流。
- getStackTrace():返回异常的跟踪流程信息。
public class TestDemo {
public static void main(String[] args) {
try {
int a = 1/0;
} catch (Exception e) {
e.printStackTrace();
System.out.println("【"+ e.getMessage() +"】");
}
}
}
控制台输出:
java.lang.ArithmeticException: / by zero
at com.wq.study.object.TestDemo.main(TestDemo.java:6)
【/ by zero】
Error 与 Exception 的区别
Error:错误。指的是 JVM 错误,即:此时的程序还没有执行,程序还没有执行,用户是无法处理的。
Exception:异常。指的是程序运行中产生的异常,用户可以处理。