java异常处理

第七章 异常处理

一、异常

  1. 异常的概念:程序执行过程中,打断正常程序流程的任何不正常情况称为错误(Error)或异常(Exception)。
  2. Java是很完善的语言,提供异常的处理方式,程序执行过程中的不成正常情况将以异常信息被JMV打印并输出到控制台,供程序猿参考,对其进行修改,使代码更为健壮。
  3. 引起异常的两种原因

        ①程序中存在非法操作,由于程序猿出于无意或考虑不周造成的,称为隐式异常。

        ②程序猿在程序中使用了throw语句引起的异常。这种异常是程序猿出于某种考虑的有意安                 排,称为显式异常。

二、Java异常类

  1. 异常存在的形式:Java程序中的异常以类的形式存在,每个异常类都可以建造异常对象即每一个具体异常都是一个对象。

         

      2. 异常发生的过程

         ①抛出异常:在一个方法的运行中发生异常,这个方法会自动生成一个异常类对象,并将其              提交给Java运行时系统。

        ②捕获异常:Java运行时系统接收到异常对象,会查找能处理这一异常的代码并把当前异常             对象交给其处理。

        ③若Java运行时系统找不到可以捕获的异常代码,则运行时系统终止,相应的Java程序也终            止运行。

      3. 实例

         

   实质:当JVM执行至a/b时,会new异常对象并将此对象抛出,打印输出信息至控制台。

三、Java的异常类

  1. Error类:合理应用程序不应有的严重问题。一般开发人员无法处理,由系统进行处理。
  2. Exception类

        ①RunTimeException(运行异常)

        ②非RunTimeException(编译异常)

     注意:所有异常都发生在运行阶段。

     3. Exception类的层次

         

     4. 区别编译时异常与运行时异常

         编译时异常:发生概率较高,需要在运行前进行预处理(即异常处理)。

         运行时异常相反。

四、异常处理

     1、异常处理的概念:在程序运行发生异常时,捕获异常并进行处理或抛弃异常,使程序继续正常运行。

     2、异常处理的两种方式

        (1)第一种:用throw关键字。

            在方法声明的位置上,使用throws关键字,将异常抛给上一级(相当于 推卸责任,把异                  常传递给调用者)。

            ①throw语句抛出异常的两种方法

                直接抛出异常类实例,格式:

                Throw new ExpectionType(...);   //其中,ExpectionType是Throwable类的子类。

                或先定义异常类对象并实例化,然后抛出,格式:

                 ExpectionType e=new ExpectionType(...);

                  throw e;

             ②隐异常抛出与显式异常抛出

                隐式异常抛出:一个方法对抛出的异常不作处理,继续上抛。

                显式异常抛出:定义该方法时使用throws子句作异常显式抛弃声明,否则编译不能通                      过。

                 显式异常抛弃声明格式:

                 修饰符 返回类型 方法名(参数列表) throws 异常类名列表{... // 方 法体中的语句

                  }

       (2)第二种:用try-catch-finally语句进行异常捕捉(拦下异常,将其真正解决)。

              ①try-catch-finally语句的作用:当try语句块中的代码执行异常,程序的正常运行便中                         断,并抛出异常对象,后在try块后的各个catch()中找出与异常对象相匹配的类。

              ②符合异常对象与对应异常类相匹配的三个条件:

                  异常对象所属的类与catch()中参数类相同。

                  异常对象所属的类是catch()中参数类的子类。

                   catch()中参数类是一个接口时,发生的异常对象类实现了这一接口。

                   注:符合以上三个条件之一即可。

              ③用法:

                   

  注意:(1)try语句块中某条语句执行发生异常时,其后的语句不再执行,而 是转至后面的某个catch语句块。

(2)执行完catch语句块的代码后,程序恢复运行,但不回到异常发生 处继续,而是执行try-catch结构后面的代码。

(3)try语句块不能单独使用,至少要有一个catch或者finally子句跟它 相配合。

(4)有多个catch子句时,最多只会执行其中一个catch语句块中的异 常处理代码。

(5)若处理的多个异常之间存在继承关系,则应先处理子类异常,即处 理子类异常的catch子句要放在前面。

(6)在Java8中,catch语句可写为

catch(FileNotFound Exception|Arithmetic Exception|...)

     3、 finally语句

        作用:finally程序块中通常包涵一些用于资源释放的代码块。如在finally程序块中应将try程序          块中打开的所有文件关闭。

        

        注意:若使用finally子句,无论执行try语句块时是否发生异常,都将执行finally子句中的语句                     块。

五、自定义异常

1、自定义异常的概念:除了可以使用java包中预定义的异常类,Java 还允许自定义异常类来处理特殊的情况。用户自定义异常类主要用来处理用户程序中特定的逻辑运行错误。

自定义异常类一般都是以Exception类为父类。自定义异常类对象只能用throw语句抛出。

2.、为什么需要自定义异常类:
Java中不同的异常类,分别表示着某一种具体的异常情况,那么在开发中总是有些异常情况是SUN没有定义好的,此时我们根据自己程序的异常情况来定义异常类。

3、什么是自定义异常类:
在开发中根据自己程序的异常情况来定义异常类。
自定义一个业务逻辑异常: RegisterException。
4、异常类如何定义:
(1)自定义一个编译期异常:自定义类并继承于java. lang. Exception。
(2)自定义一个运行时期的异常类:自定义类并继承于java. lang . Runt imeException。

5、下面是一些关于自定义异常的流行实例:
(1)自定义检查异常
注意一些流行的检查异常: I0Exception ,FileNotFoundException
(2)如果客户端能够从异常中恢复,请使其成为已检查的异常。要创建自定义的检查异常。

(3)对于检查的异常,需要尝试捕获异常。

(4)自定义未经检查的异常。
注意一些流行的未经检查的异常:

NullPointerException,
Index0utOfBoundsException,

IllegalAr gumentException
(5)如果客户端无法采取任何措施从异常中恢复,将其设置为未经检查的异常。要创建自定义的未经检查的异常。

(6)对于未检查的异常,尝试捕获异常是可选的。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值