久染

导航

Java day15【第二十七章】异常的捕获及处理

【第二十七章】异常的捕获及处理

一.认识异常对程序的影响

  异常:异常指的是导致程序中断的一种指令流。

  当程序有异常出现时,程序将不会根据既定的步骤执行完毕,而将终止于异常发生处。

  为了保证程序出现非致命错误后仍然能正常完成,所以就需要有个完善的异常处理机制。

二.处理异常

  在JAVA之中如果要进行异常的处理,可以使用:try、catch、finally这几个关键字,基本的处理结构如下:

/***
try{
    //可能出现异常的语句
}[catch(异常类型 异常语句){
    //异常处理
}[catch(异常类型 异常语句){
    //异常处理
}[catch(异常类型 异常语句){
    //异常处理
}...][finally{
    //不管是否出现异常都要执行.
}]
***/

  在此格式之中可以使用的组合为:try...catch、try...catch...finally、try...finally。

范例:处理异常:

public class Enumo {
    public static void main(String args[]){
        System.out.println("开始执行程序");
        try{
            System.out.println("数学计算:"+(10/0));
        }catch(ArithmeticException e){
            System.out.println(e);
        }
        System.out.println("程序执行完毕");    
        }
}

输出如下:

开始执行程序
java.lang.ArithmeticException: / by zero
程序执行完毕

  此时如果要想打印完整的异常类信息,则需要使用异常类处理提供的printStackTrace()方法

观察:

public class Enumo {
    public static void main(String args[]){
        System.out.println("开始执行程序");
        try{
            System.out.println("数学计算:"+(10/0));
        }catch(ArithmeticException e){
            e.printStackTrace();
        }
        System.out.println("程序执行完毕");    
        }
}

此时输出为下:

开始执行程序
java.lang.ArithmeticException: / by zero
    at Example.Enumo.main(Enumo.java:45)
程序执行完毕

 

  处理异常可以在最后追加一个finally程序块,表示异常处理后的出口,不管是否出现异常都执行。

public class Enumo {
    public static void main(String args[]){
        System.out.println("开始执行程序");
        try{
            System.out.println("数学计算:"+(10/0));
        }catch(ArithmeticException e){
            e.printStackTrace();
        }finally{
            System.out.println("【F】不管程序异常是否处理,程序都继续执行");
        }
        System.out.println("程序执行完毕");    
        }
}

  如果即便有了异常处理语句,如果没有进行正确的异常捕获,那么也会导致程序中断(finally依然执行)。

三.处理多个异常:

  很多时候程序产生多个异常,多个catch进行异常捕获。

public class Enumo {
    public static void main(String args[]){
        System.out.println("开始执行程序");
        try{
            int x = Integer.parseInt(args[0]);
            int y = Integer.parseInt(args[1]);
            System.out.println("数学计算:"+(x/y));
        }catch(ArithmeticException e){
            e.printStackTrace();
        }finally{
            System.out.println("【F】不管程序异常是否处理,程序都继续执行");
        }
        System.out.println("程序执行完毕");    
        }
}

  比如上面这个程序,会有三个异常:

    1.【未处理】程序执行的时候没有输入初始化参数 (javaJavaDemo): java.lang.ArrayIndexOutOfBoundsException

    2.【未处理】程序输入的不是数字,字母(java JavaDemo a b):java.lang.NumberFormatError

    3.【已处理】输入的被除数为0

  如果我们开发者都已经明确的知道了有哪些异常了,那么异常处理有什么用呢,为什么不多写几个判断语句。

posted on 2019-10-31 18:09  久染  阅读(152)  评论(0编辑  收藏  举报