第九章_异常

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第九章异常处理

异常概述

异常就是在程序运行的过程中所发生的不正常现象。

异常有很多种,还有一个继承体系,最上面的是Throwable,最常用的是Exception和它的子类

Exception分为两大类异常:

运行时异常:包括RuntimeException及其子类,不要求程序必须对它们作出处理,

Checked异常(非运行时异常):

Error这个分支的异常我们在程序中不可以捕获和处理。

常见的异常

异常说明

ArithmeticException 算术异常

ArrayIndexOutOfBoundsException 数组越界异常

NullPointerException 空指针异常

ClassNotFountException 类找不到异常

NumberFormatException 数字格式化异常

InputMismatchException 输入不匹配异常

单词

arithmetic [ə'rɪθmətɪk] 算术

bounds [baʊndz] 界限

pointer ['pɒɪntə] 指针

match [mætʃ]匹配

cast [kɑːst] 抛

Java异常处理机制

如果try块中没有发生异常,那么代码执行完try块中的代码后直接执行catch块之后的代码,catch块中的代码会被忽略,

如果try块中发生了异常,并且异常的类型和catch块中的异常类型有匹配的话就可以进入到该catch块中,执行完该catch块后不会回到try地方继续执行,而直接跳出catch语句块向下执行。

如果try块中发生了异常,但是发生的异常和catch块中的异常类型不一致的话,就不会进入到catch块,程序会终止运行,即catch块之后的代码也不会再运行了,try块中发生异常之后的代码就不会执行了。

注意:try块里应该放尽量少的代码,只有那些会产生异常的代码才应该放在try块里,千万不要因为学习了try-catch,就在每个方法中都从头至尾的使用try-catch,如果这样做的话会影响程序的运行效率。

当异常产生时,方法的执行流程以非线性方式执行,甚至在没有匹配到catch子句时,从方法体中过早退出,但有时,无论异常未产生还是产生后被捕获,都希望有些语句必须执行,此时要用final关键字来修饰。即不管异常是否产生如果要想某个语句块都被执行,用final关键在来修饰该语句块。

格式:try{

要检查的语句块

}

catch(异常类对象名称){

异常发生时的处理语句

}

final{

一定会运行到的语句块

}

1.try 程序块若是有异常发生时,程序的运行便中断,并抛出“异常类所产生的对象”。

2.抛出的对象如果属于catch()括号内欲捕获的异常类,则catch 会捕捉此异常,然后进到catch 的块里继续运行。否则程序会终止运行或进入final语句块执行。

3.无论try 程序块是否有捕捉到异常,或者捕捉到的异常是否与catch()括号里的异常相同,最后一定会运行finally 块里的程序代码。finally 的程序代码块运行结束后,程序再回到try-catch-finally 块之后继续执行。

由上述的过程可知,异常捕捉的过程中做了两个判断:第一个是try 程序块是否有异常产生,第二个是产生的异常是否和catch()括号内欲捕捉的异常相同。值得一提的是,finally 块是可以省略的。如果省略了finally 块不写,则在catch()块运行结束后,程序跳到try-catch 块之后继续执行。finally块的用法跟try差不多,也是一个关键字后跟一对花括号。finally 块的作用是无论try块中是否发生异常,也无论catch块是否能够捕获异常,finally块都至少执行一次。

注意:在try块里有return语句,finally块还会执行,在catch块中有返回也是一样,都会先执行finally,然后执行return,

如果finally块中有return的话,那么在finally块中就会直接返回。

如果在finally块中使用了return语句的话,会得到一个警告就是finally块未正常完成。

人为的让程序自动退出

注意:一个非零的状态码表示不正常的退出。

我们可以这样使用:

关于多重catch要注意的问题

(1)进行多重catch的时候,异常的类型要从小到大(从子类到父类)排列,而不能从大到小排列。

输出异常信息:

方法一的格式:

异常对象.printStackTrace();

方法一的格式:

异常对象.getMessage();

stack [stæk] 堆,栈;

trace [treɪs] 描绘。

message ['mesɪdʒ] 消息

注意:可以抛出异常的类型?Excption及其子类(1)已检查异常(2)Runtime异常

抛出异常

Java程序在运行时如果引发了一个可以识别的错误,就会产生一个与错误相对应的异常类的对象,这个过程称作异常的抛出

使用throws声明抛出异常

如果在一个方法中抛出了异常,希望调用者能够去及时地捕获异常,Java语言通过关键字throws声明某个方法可能抛出的各种异常以通知调用者。throws可以同时声明多个异常,之间由逗号隔开。

throws使用的格式:

返回值方法名(参数列表)throws 要抛出的异常名列表{

}

说明

(1)如某个方法myMethod可能产生Exception1,Exception2和Exception3三种异常,而它们又都是Super_Exception类的子类,则应在相应的方法中声明可能抛出的异常类语句如下:void myMethod ()throws Exception1,Exception2,Exception3{}

与之等价的声明:

void myMethod ()throws Super_Exception {}

(2)被调用函数抛出异常,在调用函数进行异常捕获和处理,如果调用函数不对异常进行处理那么调用函数要对异常进行抛出,直到main()抛出。由虚拟机来处理为止。

使用throw抛出异常-----------程序员人为的抛出即自己定义的异常(保证数据的一致性)除了系统自动抛出异常外,在编程过程中,有些问题是系统无法发现并解决的,此时需要程序员而不是系统来自行抛出异常,把问题提交给调用者来解决。

本节将介绍如何抛出(throw)异常,以及如何由try-catch 来接收所抛出的异常。抛出异常有下列两种方式:

1、程序中抛出异常

2、指定方法抛出异常

自定义异常

Java语言可以通过继承的方式编写自己的异常类,自己编写的异常通常继承的父类有:Throwable ,Exception 和RuntimeException。

相关文档
最新文档