null第7章 Java的异常处理 第7章 Java的异常处理 学习内容学习内容什么是异常
异常的处理
自定义异常类的使用什么是异常 示例1 什么是异常 示例1 请看图书管理系统中的Tool类中的readFile2Memory方法:7.1 什么是异常 示例1 续…7.1 什么是异常 示例1 续…编译错误:
这说明InputStreamReader 的构造方法、readLine()和readLine()这个方法有可能产生异常,我们必须处理异常。 什么是异常 示例2什么是异常 示例2class ExceptionDemo2 {
public static void main( String args[ ] ) {
int a = 0;
System.out.println( 5/a );
}
}C:\>javac ExceptionDemo2.java
C:\>java ExceptionDemo2
java.lang.ArithmeticException: / by zero at
ExceptionDemo2.main(ExceptionDemo2.java:4)除0产生运行期异常。什么是异常 示例2 续...什么是异常 示例2 续...这个程序没有编译错误,但是运行时期产生错误:
java.lang.ArithmeticException: / by zero at ExceptionDemo2.main(ExceptionDemo2.java:4)
从上面的两个示例可以看出异常有两种:
一种是编译期异常 check exception
一种是运行期异常 runtime exception异常处理机制 异常处理机制 两种处理异常的机制:
捕获异常:
当Java运行时系统得到一个异常对象时,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这种类型的异常的方法后,运行时系统把当前异常对象交给这个方法进行处理,这一过程称为捕获(catch)异常。这是积极的异常处理机制。如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。
声明抛弃异常:
如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃(throws)异常。这是一种消极的异常处理机制。异常类的层次 异常类的层次 异常类的层次 续…异常类的层次 续…Java中的异常类可分为两大类:
Error
Exception
它们都直接或间接地继承于Throwable类。7.2 异常的处理 7.2 异常的处理 Java语言中有两种异常处理机制:
捕获异常
声明抛弃异常图书管理系统中Tool类的部分代码: 图书管理系统中Tool类的部分代码: try {
readfile = new FileInputStream(dbFile);
ir = new InputStreamReader(readfile);
in = new BufferedReader(ir);
String str = in.readLine();
while (str != null) {
// System.out.println(str);
str = str.trim();
String[] splitString = null;
int hasSplitChar = str.indexOf(COMMA_SIGN_DELIMITERS);
if (hasSplitChar != -1) {
splitString = str.split(COMMA_SIGN_DELIMITERS);
configMap.put(splitString[0], str);
} else {
throw new SplitCharException("splite char error.");
}
str = in.readLine();
}
} catch (IOException e) {
throw new FileReadException("read file error.");
} finally {
……
}捕获异常 捕获异常 捕获异常是通过try-catch-finally语句实现 :
try
捕获异常的第一步是用try{…}选定捕获异常的范围,由try所限定的代码块中的语句在执行过程中可能会生成异常对象并抛弃。
catch
每个try代码块可以伴随一个或多个catch语句,用于处理try代码块中所生成的异常事件。catch语句只需要一个形式参数指明它所能够捕获的异常类型,这个类必须是Throwable的子类,运行时系统通过参数值把被抛弃的异常对象传递给catch块。 捕获异常 续…捕获异常 续…catch 语句的顺序:
捕获异常的顺序和catch语句的顺序有关,当捕获到一个异常时,剩下的catch语句就不再进行匹配。因此,在安排catch语句的顺序时,首先应该捕获最特殊的异常,然后再逐渐一般化。也就是一般先安排子类,再安排父类。
IOException 是FileNotFoundException 父类。 try{
......
}catch( FileNotFoundException e ){
System.out.println( e );
System.out.println( "message: "+e.getMessage() );
e.printStackTrace( System.out );
}catch( IOException e ){
System.out.println( e );
}捕获异常 续…捕获异常 续…finally
捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。不论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。声明抛弃异常 声明抛弃异常 如果在一个方法中生成了一个异常,但是这一方法并不确切地知道该如何对这一异常事件进行处理,这时,一个方法就应该声明抛弃异常,使得异常对象可以从调用栈向后传播,直到有合适的方法捕获它为止。
声明抛弃异常是在一个方法声明中的throws子句中指明的。例如: public int read () throws IOException{
......
}声明抛弃异常 续…声明抛弃异常 续…throws子句中同时可以指明多个异常,之间由逗号隔开。例如: public static void main(String args[]) throws
IOException,IndexOutOfBoundsException {…}抛出异常 抛出异常 抛出异常就是产生异常对象的过程,首先要生成异常对象,异常或者由虚拟机生成,或者由某些类的实例生成,也可以在程序中生成。在方法中,抛出异常对象是通过throw语句实现的。
例如:
可以抛出的异常必须是Throwable或其子类的实例。下面的语句在编译时将会产生语法错误: IOException e=new IOException();
throw e ;throw new String("want to throw"); 自定义异常类的使用 自定义异常类的使用 在图书管理系统中我们自定义两个异常类:FileReadException和SplitCharException。
自定义异常类图: 自定义异常类的使用 续…自定义异常类的使用 续…自定义异常类FileReadException: import java.io.IOException;
public class FileReadException extends IOException {
public FileReadException(){
super();
}
public FileReadException(String message){
super(message);
}
}自定义异常类的使用 续…自定义异常类的使用 续…自定义异常类必须是Throwable的直接或间接子类。
注意:一个方法所声明抛弃的异常是作为这个方法与外界交互的一部分而存在的。所以,方法的调用者必须了解这些异常,并确定如何正确的处理他们。
本文档为【07 第7章 Java的异常处理】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。