简述java中的异常与捕获机制

21 篇文章 0 订阅

异常的概念

“exception”顾名思义,就是“我对此感到意外”的意思,在程序中可以强制编译器来处理程序运行中的发生的并非由程序本身所造成的错误,这个处理方法在java中就叫做异常捕获,而这些并非程序本身产生的错误就叫做“异常”。

基本异常

      举一个抛出异常的简单例子,对于对像引用t,传给你的时候可能没有初始化,那么在使用这个对象调用其方法前可以先对它进行检查,像这样:

     if(t==null)

        throws new NullPointerException();

这就是抛出了一个异常,那么在当前环境下就不必担心这个可能出现的空指针异常了,它将在别的地方获得处理。使用异常处理机制的好处就是异常允许我们强制程序停止运行,并告诉我们出现了什么问题。或者强制程序处理问题,并返回稳定状态。

如何捕获异常

      如果方法内部出现了异常,这个方法将在抛出异常时结束,如果不希望该方法就此结束,就可以设置一个try代码块,在这个try代码块中尝试调用方法,结果如下:

     try{

        //要尝试运行的代码

     }

异常处理程序

      如果要将抛出的异常进行恰当的处理,就得准备相应的处理程序,异常处理程序紧跟在try代码块之后,以关键字catch表示:

      try{

        //要尝试运行的代码

      }catch(){

        //处理该异常的代码

      }

  (关于catch语句的异常类型:如果是catch语句的异常类型是CapacityToolException的父类,那么程序也回进入到catch语句中。)

创建自定义异常

java中不可能将所有的异常考虑的面面俱到,所以有必要通过自己写的异常类来处理各种可能出现的异常,要定义异常类,必须从已有的异常类中继承,最好是选择意思相近的异常类来继承。

6 Java异常的传递

     Java异常传递得出规则是;将宜昌传递给方法的调用者,直接被处理掉或者到达main方法,异常传递给main方法后,其实就是被java平台处理掉了。我们知道main方法就是程序的入口,所有的方法调用都是从main方法开始的,所以一个异常最多也就是传递到main方法这里。当一个异常在方法的代码中发生的时候,方法中后面的代码都不会被执行的。

异常的语法传递规则是:从某个方法中的某个throw语句开始,异常将从这个方法传递到调用这个方法的地方,并按方法调用的顺序继续传递,知道追出的方法,也就是main方法。

一场必须被传递出去或者被处理掉,否则在编译源代码的时候,java编译器就会输出一个语法错误。

在程序运行的时候,如果方法的某行代码抛出了异常,那么方法之后的代码都不会执行。

7 try-catch-finally语句

     try-catch-finally语句的语法结构规则如下:

        try{

       //可能发生异常的代码

       }catch(异常类型1 异常引用) {

       //异常处理代码

       }catch(异常类型2 异常引用) {

       //异常处理代码

       }

       ……

       }catch(异常类型n 异常引用) {

        //异常处理代码

       }finally{

        //finally 语句代码块

       }

该段与try-catch语句唯一不同的就是在语句的最后,多出了一个finally块,这种语句的作用是:无论语句块中的代码是否发生异常,无论是否有catch语句可以与异常匹配,finally语句块中的代码都会在之后执行,也就是说,这种语法为原来的try-catch语句多加了一种功能,使用finally块让一段代码肯定可以被执行到。

    但是,需要说明的是,final语句并不处理异常,就是说如果一个异常没有被catch、语句处理掉,那么在这个异常被抛出到方法之前,会首先执行finally语句块,但是在finally语句执行完之后,异常还是会被抛出去。同时,finally语句一定会被执行,即使在catch语句中使用了return来结束方法,finally语句块也会被执行到。

8 try-finally语句

在java的异常处理机制中,try-finally语句严格来说并不是来处理异常的。try-finally语句的语义可以被理解为:尝试运行某段代码,无论这段代码是否有return语句,不管是否发生异常,都需要在结束后运行finally语句代码。

利用catch语句

     catch语句一旦捕获到了异常之后往往要采取扑救措施来时程序“回到正轨”,比如说下边一段代码:

……

}catch(Exception e){

 System.out.println(“指定的文件不存在,程序将退出!”);

 System.exit(0);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值