全国咨询热线:400-618-9090

首页技术文章正文

Java程序异常处理之try…catch和finally[黑马程序员]

创建时间:2019-09-17 11:36:15.0 来源:黑马程序员

在java程序运行中,如果发成异常,程序立即终止,无法继续向下执行。为了解决这样的问题,Java中提供了一种对异常进行处理的方式——异常捕获。异常捕获通常使用try…catch语句,具体语法格式如下:

 

try{
   //程序代码块
} catch(ExceptionType (Exception 类及其子类) e) {
   //对 ExceptionType的处理
}

  

1568691361114_java-异常-处理.jpg


其中在try代码块中编写可能发生异常的Java语句,catch代码块中编写针对异常进行处理的代码。当try代码块中的程序发生了异常,系统会将这个异常的信息封装成一个异常对象,并将这个对象传递给catch代码块。catch代码块需要一个参数指明它所能够接收的异常类型,这个参数的类型必须是 Exception类或其子类。

 

public class Example{
    public static void main(String [] args){
            //下面的代码定义了一个 try catch语句用于捕获异常
            try{
                int result= divide(4,0);    //调用 divide()方法
                System.out.println(result);
            } catch (Exception e) {     //对异常进行处理
          System.out.println("捕获的异常信息为:"+e.getMessage());
            }
            System.out.printIn("程序继续向下执行……”);
        }
      //下面的方法实现了两个整数相除
    public static divide (int x,int y) {
        int result=X / y;    //定义一个变量result记录两个数相乘的结果
        return result;      //将结果返回
    }
}

 

运行结果为:

D:\cn\itcast\chapter04>java Example
捕获的异常信息为:/ by zero
程序继续向下执行…

 

上面案例中,对可能发生异常的代码用try…catch语句进行了处理。在try代码块中发生被0除异常,程序会转而执行catch中的代码,通过调用Exception对象的getMessage()方法,返回异常信息“/by zero”。catch代码块对异常处理完毕后,程序仍会向下执行,而不会异常终止。


需要注意的是,在try代码块中,发生异常语句后面的代码是不会被执行的,如本例中第6行代码的打印语句就没有执行。

在程序中,有时候我们希望有些语句无论程序是否发生异常都要执行,这时就可以在try…catch语句后,加一个finally代码块,接下来对演示一下finally代码块的用法。


public class Example{
    public static void main (String[] args) {
       //下面的代码定义了一个try… catch…fina1ly语句用于抽获异常
       try {
          int result= divide(4,0);  //调用 divide()方法
          System.out.println(result);
       } catch (Exception e){        //对捕获到的异常进行处理
        System.out.println(“捕获的异常信息为:”+e.getMessage());
        return;     //用于结束当前语句
       } finally {
        System.out.println("进人finally代码块”);
          }
      System.out.println("程序继续向下执行……”);
    }
      //下面的方法实现了两个整数相除
    public static int divide (int x, int y){
       int result=x / y; //定义一个变量result记录两个数相除的结果
       return result;   //将结果返回
    }
}

 

 

运行结果为:

D:\cn\itcast\chapter04>java Example
捕获的异常信息为:/ by zero
进入finally代码块

 
在上面例子中catch代码块中增加了一个return语句,用于结束当前方法,此时程序第13行代码就不会执行了,而 finally中的代码仍会执行,并不会被 return语句所影响,也就是说不论程序是发生异常还是使用 retur语句结束, finally中的语句都会执行,正是由于这种特殊性,在程序设计时,经常会在try… catch后使用 finally代码块来完成必须做的事情,例如释放系统资源。

需要注意的是,finally中的代码块有一种情况下是不会执行的,那就是在try…catch中执行了 System.exit(0)语句。System.exit(0)表示退出当前的Java虚拟机,Java虚拟机停止了,任何代码都不能再执行了。

以上我们介绍了,java异常处理的方法try…catch和finally 希望对您有所帮助,如果想系统学习java,请点击页面咨询按钮,了解黑马程序员java培训课程详情。

在线咨询 我要报名