《Web高级程序设计第6章-异常.ppt》由会员分享,可在线阅读,更多相关《Web高级程序设计第6章-异常.ppt(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第6章章 异常 武昌工学院 信息工程学院 姚远版权所有本章目录本章目录6.1概述6.2抛出异常6.3关于异常的类型6.4异常处理结构6.5throws:异常声明6.6自定义异常5.1 概述异常情况指是在程序编写完成后的编译、测试和运行过程中所产生的不正常情况。这些不正常情况可以导致软件无法按照编码的要求正常运行下去,轻者出错退出运行,重者会造成整个系统终止运行,甚至造成计算机死机。造成异常现象的因素是多样的,其中有编码错误、数据错误、系统匹配错误等。例:程序运行出现错误public class Test static int chu(int a)return 100/a;public sta
2、tic void main(String args)System.out.println(chu(10);但将程序中但将程序中chu(10)更改为:更改为:chu(0)。此程序会出。此程序会出现错误,即是异常。现错误,即是异常。5.1 概述现今异常作为一种编程思想,程序员可以将应用程序中可能出现错误的某类情况构造成异常,这些异常通常以自定义异常类的形式作为程序代码的一部分。将出错处理和常规处理逻辑进行分开编写,使得应用程序的可读性、健壮性大大增强、可维护性也大大提高。5.1 概述if(判断条件1)程序段1else if(判断条件2)程序段2else if(判断条件3)程序段35.1 概述try
3、catch(是否出现情况1)程序段1catch(是否出现情况2)程序段2catch(是否出现情况3)程序段3例import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;public class Test public static void main(String args)FileReader f;try f=new FileReader(d:a133.txt);char str=new char100;f.read(str);catch(FileNotFoundExce
4、ption e)System.out.println(e.getMessage();catch(IOException e)System.out.println(e.getMessage();异常作为一种程序错误处理机制被广泛应用于程序中。异常情况包括:程序运行时读取的文件在磁盘上不存在,访问的数据库处于关闭状态,甚至程序员可以自定义何时为异常情况。Java提供了一些异常类,可对应于不同的异常情况。同时提供了异常处理结构便于程序员使用并处理异常。java提供的异常处理可以使应用程序的出错处理和其他程序逻辑得以有效的分开,使程序结构更为清晰。异常对象一旦产生,需要采用相应机制来处理,合理的使用异
5、常机制来处理出错情况,可以有效地使程序避免死循环、死机、其它对操作系统的损害等。异常在程序运行期间是作为对象存在的,可以通过throw语句创建,也可以通过系统检测到错误情况发生,自动抛出异常,当异常对象产生(抛出)时,如果程序没有采取有效的异常处理结构进行处理,程序将会异常终止。6.2抛出异常抛出异常6.2.1 throw抛出异常抛出异常6.2.2 系统抛出异常系统抛出异常6.2.1 throw抛出异常抛出异常Pro6_1:public class testException public static void main(String args)int num=0;if(num=0)thro
6、w new ArithmeticException(除数不能为零!);System.out.println(100/num);运行结果:Exception in thread main java.lang.ArithmeticException:除数不能为零!at testException.main(testException.java:8)6.2.1 throw抛出异常抛出异常6.2.1 throw抛出异常抛出异常Pro6_2:public class testException public static void main(String args)int num=0;System.ou
7、t.println(f(num);System.out.println(执行完毕执行完毕!);static int f(int a)if(a=0)throw new ArithmeticException(除数不能为零除数不能为零!);return 100/a;运行结果同样出现异常而终止。6.2.1 throw抛出异常抛出异常6.2.2 系统抛出异常系统抛出异常程序运行时,如系统发现错误,系统也会根据错误类别抛出异常对象。public class Test static int chu(int a)return 100/a;public static void main(String args
8、)System.out.println(chu(0);Exception in thread main java.lang.ArithmeticException:/by zeroat Test.chu(Test.java:5)at Test.main(Test.java:9)public class Testpublic static void main(String args)f();static void f()int a=new int 10;a10=10;Exception in thread main java.lang.ArrayIndexOutOfBoundsException
9、:10at Test.f(Test.java:10)at Test.main(Test.java:5)6.2.1 throw抛出异常抛出异常Pro6_3:import java.io.*;public class Test static int getData()/打开某文件打开某文件 public static void main(String args)System.out.println(getData();运行结果同样出现异常而终止。6.3 关于异常的类型关于异常的类型一般某种异常情况均对应相应的异常类,这些异常类以及程序员根据自己需要自定义的异常类一般都继承自Exception。类E
10、xception的构造方法:public Exception();public Exception(String s);类Exception的两个常用方法:getMessage():返回和异常相关说明信息toString():getMessage方法的返回值更为详尽,还包括异常类的名字等。6.4 异常处理结构异常处理结构无论是系统抛出异常,还是程序主动抛出异常,异常对象一旦产生,程序需要进行进一步处理,而Java中可通过固定的try-catch或者try-catch-finally结构来完成。try-catchJava语言中可通过使用try-catch来捕获一个或多个异常,基本格式为:try
11、语句 catch(异常错误类型 名字)语句 public class testException public static void main(String args)int num=0;trySystem.out.println(100/num);System.out.println(执行完毕!);catch(ArithmeticException e)System.out.println(算术异常:+e.getMessage();运行本程序,程序将正常退出,并给出运行结果提示:算术异常:/by zeropublic class TestException static int i=100
12、;static int chu(int a)throws ArithmeticExceptionreturn 100/a;public static void main(String args)trySystem.out.println(chu(0);i+;catch(ArithmeticException e)System.out.println(发生算术运算异常,除数不能为零!);System.out.println(i);“即使一部分程序发生了问题,但仍然可以让程序按设计者思路继续执行”发生算术运算异常,除数不能为零!1006.4.2 try-catch-finallytry 语句 ca
13、tch(异常错误类型 名字)语句 finally 语句 public class testpublic static void main(String args)tryint i=new Integer(E3E4);System.out.println(i);catch(Exception e)System.out.println(出错了,错误为:+e.getMessage();finallySystem.out.println(不管怎样,一定要Bye Bye!);System.out.println(我们继续做别的事情吧);运行效果为:出错了,错误为:For input string:E3E
14、4不管怎样,一定要Bye Bye!我们继续做别的事情吧6.4.3 关于关于catch匹配匹配public class testException public static void main(String args)int num=0;trySystem.out.println(100/num);System.out.println(执行完毕!);catch(ArithmeticException e)System.out.println(算术异常:+e.getMessage();运行效果为:算术异常:/by zero6.4.4 用特定异常类型代替通用异常用特定异常类型代替通用异常类型类型p
15、ublic class testException public static void main(String args)int num=0;tryif(num=0)throw new ArithmeticException(除数不能为零!);System.out.println(100/num);catch(IOException e)System.out.println(算术异常:+e.getMessage();程序编译将不能通过public class test public static void main(String args)int num=0;tryif(num=0)thro
16、w new ArithmeticException(除数不能为零!);System.out.println(100/num);Thread.sleep(500);catch(InterruptedException e)System.out.println(异常:+e.getMessage();catch(ArithmeticException e)System.out.println(算术异常:+e.getMessage();算术异常:除数不能为零!6.5 throws:异常声明:异常声明import java.io.*;public class testException static v
17、oid getI()throws IOException/public static void main(String args)getI();此程序编译将不能通过,因为getI方法已进行了异常声明,作为调用者,方法main应该在调用getI方法时进行相应的异常处理。换句话说,一旦方法后面声明了可能的异常。调用者必须要处理。否则编译时不能通过.编译出错:Unhandled exception type IOExceptionpublic class testException void f()throws Exceptionthrow new Exception(此为测试异常对象的提示信息!)
18、;testException()throws Exceptionf();System.out.println(构造方法方法执行完毕);public static void main(String args)trytestException testone=new testException();catch(Exception e)System.out.println(e.getMessage();此例中直到main方法的try-catch结构才得以处理自定义异常根据程序需要将可能出现的各种异常情况写成相应的自定义异常类。该自定义异常类须继承自Exception或者Throwable,才能成为c
19、atch子句中出现的类型例:要求:(1)当输入abc时,运行结果如下:abc is too short!发生字符串太短异常:StringTooShortException程序执行结束(2)当输入abcdef,运行结果如下:abcdef程序执行结束(3)当输入abcdefghijklmn时,运行结果如下:abcdefghijklmn is too long!发生字符串太长异常:StringTooLongException例:异常类的编写class StringTooShortException extends Exception public StringTooShortException(St
20、ring s)System.out.println(s+is too short!);例:异常类的编写class StringTooLongException extends Exceptionpublic StringTooLongException(String s)System.out.println(s+is too long!);import java.io.*;public class Test static void myFunc(String s)throws StringTooShortException,StringTooLongException if(s.length(
21、)=5&s.length()=10)System.out.println(s);else if(s.length()5)throw new StringTooShortException(s);else throw new StringTooLongException(s);public static void main(String args)throws IOException InputStreamReader in=new InputStreamReader(System.in);BufferedReader br=new BufferedReader(in);String str=br.readLine();try myFunc(str);catch(StringTooShortException e)/捕捉字符串太短异常捕捉字符串太短异常 System.out.println(发生字符串太短异常:+e);catch(StringTooLongException e)/捕捉字符串太长异常捕捉字符串太长异常 System.out.println(发生字符串太长异常:+e);finally/程序最后执行位置程序最后执行位置 System.out.println(程序执行结束);
限制150内