资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第八章,Java异常处理,第八章Java异常处理,1,本章内容,Java,异常的概念和处理机制,Java,异常的分类,异常的捕获、处理和抛出,使用用户自定义异常,本章内容Java异常的概念和处理机制,2,Java异常,Java程序运行过程中所发生的异常事件可分为两类:,错误(Error):JVM系统内部错误、资源耗尽等严重情况,违例(Exception):其它因编程错误或偶然的外在因素导致的一般性问题,例如:,对负数开平方根,空指针访问,试图读取不存在的文件,网络连接中断,Java异常Java程序运行过程中所发生的异常事件可分为两类,3,Java异常举例(1)(0801),public class Test8_1,public static void main(String args),String friends=lisa,bily,kessy;,for(int i=0;i5;i+),System.out.println(friendsi);,System.out.println(nthis is the end);,Java异常举例(1)(0801)public class,4,Java异常举例(2),程序Test8_1运行结果:,java Test8_1,lisa,bily,kessy,Exception in thread main java.lang.ArrayIndexOutOfBoundsException,at Test8_1.main(Test8_1.java:5),Press any key to continue.,Java异常举例(2)程序Test8_1运行结果:java,5,Java异常类层次,Java异常类层次,6,常见异常,RuntimeException,错误的类型转换,数组下标越界,空指针访问,IOExeption,从一个不存在的文件中读取数据,越过文件结尾继续读取,连接一个不存在的URL,常见异常RuntimeException,7,异常处理机制,Java程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给,Java,运行时系统,这个过程称为抛出(,throw,)异常。,当,Java,运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(,catch,)异常。,如果,Java,运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的,Java,程序也将退出。,程序员通常只能处理违例(,Exception,),而对错误(,Error,)无能为力,异常处理机制Java程序的执行过程中如出现异常,会自动生成一,8,异常处理举例(1)(0802),public class Test8_2,public static void main(String args),String friends=lisa,bily,kessy;,try,for(int i=0;i5;i+),System.out.println(friendsi);,catch(java.lang.ArrayIndexOutOfBoundsException e),System.out.println(index err);,System.out.println(nthis is the end);,异常处理举例(1)(0802)public class Te,9,异常处理举例(2),程序java8_2运行结果:,java java8_2,lisa,bily,kessy,index err,this is the end,Press any key to continue.,异常处理举例(2)程序java8_2运行结果:java ja,10,捕获违例,捕获异常是通过,try-catch-finally,语句实现的。,try,.,/可能产生违例的代码,catch(ExceptionName1 e),.,/当产生ExceptionName1型违例时的处置措施,catch(ExceptionName2 e),.,/当产生ExceptionName2型违例时的处置措施,finally,.,/无条件执行的语句,捕获违例捕获异常是通过try-catch-finally语,11,捕获违例,try,捕获违例的第一步是用,try,语句块选定捕获违例的范围。,catch,在,catch,语句块中是对违例对象进行处理的代码,每个,try,语句块可以伴随一个或多个,catch,语句,用于处理可能产生的不同类型的违例对象。与其它对象一样,可以访问一个违例对象的成员变量或调用它的方法。,getMessage,()方法,用来得到有关异常事件的信息,printStackTrace,()用来跟踪异常事件发生时执行堆栈的内容。,捕获违例try,12,捕获违例,finally,捕获例外的最后一步是通过,finally,语句为例外处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。不论在,try,代码块中是否发生了异常事件,,finally,块中的语句都会被执行。,finally,语句是任选的,捕获违例finally,13,IOException,违例处理举例(1)(0803),import java.io.*;,public class Test8_3,public static void main(String args),FileInputStream in=new FileInputStream(myfile.txt);,int b;,b=in.read();,while(b!=-1),System.out.print(char)b);,b=in.read();,in.close();,IOException违例处理举例(1)(0803)impo,14,IOException,违例处理举例(2),程序Test8_3编译结果:,E:exjavac Test8_3.java,E:exTest8_3.java:4:未报告的异常 java.io.FileNotFoundException;必须被捕获或被声明抛出,FileInputStream in=new FileInputStream(myfile.txt);,E:exTest8_3.java:6:未报告的异常 java.io.IOException;必须被捕获或被声明抛出b=in.read();,E:exTest8_3.java:9:未报告的异常 java.io.IOException;必须被捕获或被声明抛出 b=in.read();,E:exTest8_3.java:11:未报告的异常 java.io.IOException;必须被捕获或被声明抛出 in.close();,4 个错误,IOException违例处理举例(2)程序Test8_3编,15,IOException,违例处理举例(3)(0804),import java.io.*;,public class Test8_4,public static void main(String args),try,FileInputStream in=new FileInputStream(myfile.txt);,int b;b=in.read();,while(b!=-1),System.out.print(char)b);,b=in.read();,in.close();,catch(IOException e),System.out.println(e);,finally,System.out.println(Its ok!);,IOException违例处理举例(3)(0804)impo,16,声明抛弃违例(0805),声明抛弃违例是,Java,中处理违例的第二种方式,如果一个方法(中的语句执行时)可能生成某种违例,但是并不能确定如何处理这种违例,则此方法应声明抛弃违例,表明该方法将不对这些违例进行处理,而由该方法的调用者负责处理,声明抛弃举例,:,public void readFile(String file)throws FileNotFoundException,/读文件的操作可能产生FileNotFoundException类型的违例,FileInputStream fis=new FileInputStream(file);,.,声明抛弃违例(0805)声明抛弃违例是Java中处理违例的第,17,声明抛弃违例举例,import java.io.*;,public class Test8_5,public static void main(String args),Test8_5 t=new Test8_5();,try,t.readFile();,catch(IOException e)System.out.println(e);,public void readFile(),throws IOException,FileInputStream in=new FileInputStream(myfile.txt);,int b;b=in.read();,while(b!=-1),System.out.print(char)b);,b=in.read();,in.close();,声明抛弃违例举例import java.io.*;,18,重写方法声明抛弃违例原则,重写方法不能抛出比被重写方法范围更大的违例类型,public class A,public void methodA()throws IOException,public class B1 extends TestA,public void methodA()throws FileNotFoundException,public class B2 extends TestA,public void methodA()throws Exception,重写方法声明抛弃违例原则重写方法不能抛出比被重写方法范围更大,19,抛弃例外,Java,异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出,也可根据需要需要人工创建并抛出,首先要生成例外对象,然后通过,throw,语句实现抛出操作(提交给,Java,运行环境)。,IOException e=new IOException();,throw e;,可以抛弃的例外必须是,Throwable,或其子类的实例。下面的语句在编译时将会产生语法错误:,throw new String(want to throw);,0806/test.java,抛弃例外Java异常类对象除在程序执行过程中出现异常时由系统,20,创建用户自定义例外类(,0806,),用户自定义例外类,MyException,,用于描述数据取值范围错误信息:,class MyException extends Exception,private int idnumber;,public MyException(String message,int id),super(message);,this.idnumber=id;,public int getId(),return idnumber;,创建用户自定义例外类(0806)用户自定义例外类MyExce,21,使用用户自定义例外类,public class Test8_6,public void regist(int num)throws MyException,if(num 0),throw new MyException(人数为负值,不合理,3);,System.out.println(登记人数+num);,public void manager(),try,regist(100);,catch(MyException
展开阅读全文