上一篇:对异常说“我不管” | 带你学《Java面向对象编程》之七十九
【本节目标】
通过阅读本节内容,你将进一步掌握异常处理的相关方法,并能够做到准确地捕获异常与抛出异常。同时,也能了解到RuntimeException的相关信息。
异常处理的标准格式
现在已经学习完成了大部分的异常处理格式:try、catch、finally、throw、throws,那么这些关键字在实际的开发之中往往会一起进行使用。下面通过一个具体的程序进行分析。
现在要求定义一个实现除法计算的方法,在这个方法之中开发要求如下:
- 在进行数学计算开始与结束的时候进行信息提示;
- 如果在进行计算的过程之中产生了异常,则要交给调用处进行处理。
class MyMath {
//异常交给调用处处理则一定要在方法上使用throws
public static int div(int x , int y) throws Exception {
int temp = 0 ;
System.out.println("***【START】除法计算开始。");
try {
temp = x / y ;
}catch (Exception e){
throw e ; //向上抛异常对象
}finally{
System.out.println("***【END】除法计算结束。");
}
return temp ;
}
}
public class JavaDemo {
public static void main(String args[]) {
try {
System.out.println(MyMath.div(10,0)) ;
}catch (Exception e) {
e.printStackTrace() ;
}
}
}
图一 异常处理结果
对于此类操作实际上可以简化省略catch、throw的操作
class MyMath {
//异常交给调用处处理则一定要在方法上使用throws
public static int div(int x , int y) throws Exception {
int temp = 0 ;
System.out.println("***【START】网络资源连接。");
try {
temp = x / y ;
}finally{
System.out.println("***【END】网络连接关闭。");
}
return temp ;
}
}
public class JavaDemo {
public static void main(String args[]) {
try {
System.out.println(MyMath.div(10,0)) ;
}catch (Exception e) {
e.printStackTrace() ;
}
}
}
图二 异常处理格式
在以后实际开发过程之中,这种异常的处理格式是最为重要的,尤其是当与一些资源进行访问操作的时候尤其重要。
RuntimeException
通过之前的分析可以发现只要方法后面带有throws往往都是告诉用户本方法可能产生的异常是什么,所以这个时候来观察一段代码。
public class JavaDemo {
public static void main(String args[]) {
int num = Integer.parseInt("123") ;
System.out.println(num) ; //123
}
}
打开Integer类中的parseInt()方法的定义来观察:
public static int parseInt(String s) throws NumberFormatException
这个方法上明确的抛出了一个异常,但是在处理的时候并没有强制性要求处理。观察一下NumberFormatException类的继承结构,同时也观察一下数学异常类的继承结构:
ArithmeticException: | NumberFormatException: |
---|---|
java.lang.Object java.lang.Throwable java.lang.Exception java.lang.RuntimeException java.lang.ArithmeticException |
java.lang.Object java.lang.Throwable java.lang.Exception java.lang.RuntimeException java.lang.IllegalArgumentException java.lang.NumberFormatException |
如果现在所有的程序执行上只要使用了throws定义的方法都必须要求开发者进行手工处理,那么这个代码的编写就过于麻烦了。所以在设计的过程之中考虑到代码编写的方便,所以提供有一个灵活的可选的异常处理父类“RuntimeException”,这个异常类的子类可以不需要强制性处理。
面试题:请解释RuntimeException与Exception的区别?请列举出几个常见的RuntimeException。
- RuntimeException是Excception的子类;
- RuntimeException标注的异常可以不需要进行强制性处理,而Exception异常必须强制性处理;
- 常见的RuntimeException异常类型: NumberFormatException、 ClassCastException、 NullPointerException;
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学