get异常处理的必备技能 | 带你学《Java面向对象编程》之八十

上一篇:对异常说“我不管” | 带你学《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() ;
        }
    }
}

get异常处理的必备技能   | 带你学《Java面向对象编程》之八十
图一 异常处理结果

对于此类操作实际上可以简化省略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() ;
        }
    }
}

get异常处理的必备技能   | 带你学《Java面向对象编程》之八十
图二 异常处理格式

在以后实际开发过程之中,这种异常的处理格式是最为重要的,尤其是当与一些资源进行访问操作的时候尤其重要。

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的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:教你如何自定义“异常” | 带你学《Java面向对象编程》之八十一
更多Java面向对象编程文章查看此处

上一篇:起步的好选择:安装 Xubuntu 16.10 完全指南


下一篇:java 截取字符串