简单学习异常处理
异常分类
异常主要分为 运行时异常 和 编译时异常 。
运行时异常也叫非受查异常,是程序在运行时出现错误时的一种通知机制。它的出现是在程序运行时错误运行状态栏报出的一种红色异常信息。这时的程序运行不能通过,无法达到预期结果。如下图所示:
编译时异常也叫受查异常,是程序在编译时出现错误时的一种通知机制。主要是在程序编写时出现错误的提醒。表现为程序代码下方出现的红色波浪线或者程序代码变为红色。这时程序编译不能通过。如下图所示:
异常语法
异常的语法如下:
try{
//有可能出现异常的代码语句
}catch(//异常类型 异样对象){
//异常处理
}finally{
//异常出口
}
try代码块中放的是可能出实现的异常代码。
catch代码块中放的是出现异常后的处理行为。
finally代码块中放的是代码处理后的善后代码,会在最后执行。
public class ExceptionStudy {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double a = scanner.nextDouble();
double b = scanner.nextDouble();
try {
double num = div(a , b);//当b为0时,除法计算会报出异常
System.out.println(num);//当上一行程序运行出现异常时,不会执行该异常,直接执行catch语句。
} catch (ArithmeticException e) {
e.printStackTrace();
}finally {
System.out.println("计算过程完成!");
}
System.out.println("代码执行完毕!");
}
public static double div(double a , double b) throws ArithmeticException{
if(b == 0){
throw new ArithmeticException("除数为零,算术异常!");
}
double num = a / b;
return num;
}
}
异常存在代码运行结果如图所示:
代码无异常运行结果如图所示:
异常的执行过程
程序首先执行异常代码前的语句,到了异常代码时首先执行try语句中的代码,如果try语句中的代码出现异常就会终止try中的代码,转而执行catch语句中的代码进行异常匹配,如果匹配到了相同的异常类型就会执行该异常类型中的语句,如果没有匹配到就会将异常依次向上传递到上层调用者,无论是否找到匹配的异常类型,都会执行finally代码块中的代码。直到找到异常匹配类型为止,或者直到传递到main方法也没找到合适的代码处理异常,就会交给JVM来进行处理,此时程序会异常终止。
自定义异常
手动抛出异常是通过throws 关键字后面跟上异常类型,同时根据抛出的异常来对异常添加,修改一些信息,或者指定一些描述信息。具体如上述代码演示所示。
自定义异常类 根据一些实际情况,有时需要自定义一些异常,这时候可以使用自定义异常类来处理这些实际情况。在自定义类的使用中可能基于使用情况要进行继承异常类。继承异常类主要有两种,一种是Exception类或者RuntimeExceotion类,继承自Exception类的异常一般默认为受查异常,而继承自RuntimeExceotion类的异常一般默认为非受查异常。