版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JAVA甲第8辛Java舟常比理&丄什么是异带异常(Exception)也叫例外。在Java编程语占屮,异常就是程 序在运行过程中山于硬件设备间题、软件设计错误、缺陷等 驚制緋序嘗肋在软件开发过程中,很多情况都将导致异(1) B打开胡文件不存在:(2)网络连接中断,(3)操作数超出预定范国;(4)正在装载的类文件丢失;(5)访问的数据库打不开;可见,在程序中产生异常的现象是非常普遍的。 在Java编程 语言中,对异常的处理冇卄常完备的机制。异常本身作为一 个对象,产牛异常就是产牛一个异常对彖。这个对象町能由 应用程序本身产牛.,也可能由Java虚拟机产生,这取决于 产主异常的类世。该异
2、常对象屮包描了异常事件的类世以及 发牛 杲常时应用程序H前的状态和调用过程。请看下面产生 异常餉例学。/ Exceptionl.javaimport java.io.*;class Exceptionl public static void main(String args)Fileinputstream fis =new FilelnputStreamCtext.txt);int b;while(b=fis.read()! = -l) System, out. print(b);fis.close();JAVA占8丄什JAVA半编译这个程序时,屏幕卜会输出卜面的信息;D:userchap08
3、javac Exception 1.javaException 1.java:5: unreported exception java.io.FileNotFoundException;must be caught or declared to be thrownFileinputstream fis = new FileinputStream(Htext.txt*);AExceptioni.java:7: unreported exception java.io.IOException; must be caughtor declared to be thrownwhile(b=fis.re
4、ad()!=-l) AExceptionl.java:10: unreported exception java.io.IOExc亡ption; must becaught ordeclared to be thrownfis.dose();A3 errors占8 1什么是异常【例8-21数组下标超界的例于/ Exception2.javapublic class Exception2public static void main (String args) String langs = JavaVVisaul Basic,zC4-+; int i = 0;while (i javac Exc
5、eption2.javaD:userchap08java Exception2JavaVisaul BasicC+Exception in thread main1javag.ArrayindexOutOfBoundsException: 3at Exception2.main(Exception2 java:8)上面的例子编译町以通过,但运行时出现异常信息被抛出。在H循环被执行四次之后,数组卜一标溢出,程序终比,并带有 错误信息,就象前面所示的程序那样。,【例8-3被0除的例子/ Exception3 .javaclass Exception3public static void main(
6、String args)int a=0;System.out.printl n(5/a);我们编译这个程序得到其字节码文件,然后运行它.屏幕上的显示如下:D:userchap08javac Exception3.java D:userchap08java Exception3Exception in threadnmainHjava.Iang.ArithmeticException: / by zeroat Exception3.main(Exception3.java:5)内为除数不能为 6 所以在程序运行的时像出现了除以Q溢出的异常事件。丄在上面的三个例子中,我们都遇到了异常。屏幕匕所显示
7、 的信息分别指明了异常的类烈以及异常所在的包同时我们也 可以看到,对于某些界常,在程序中必须对它进行处理,否 则编译程序会抬汨错以(如例8 1)。但对另些异常,在程序 中可以不做处理,而直接由运行时系统来处理(如例8-3)o在 下节中,我们将详细了解这两类丹常,以及在程序中如何处理这两类异常。&丄什么是异帝JAVA3N3g IOException、对象。这个对彖可能是由正在运行的方法生成,也可能由Java虚拟机生成, 其中包含一些信息指明异常事件的类型以及当异常发牛时程序的运行状态 等。Java语言提供两种处理异常的机制:(1)捕获异常在Java程序运行过程屮系统得到一个异常对彖时,它
8、将会沿着方法的 调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这种类型异常 的方法后,运行时系统把当前异常对象交给这个方法进行处理,这-过程 称为捕获(catch)异常。这是-种积极的异常处理机制。如果Java运行时系 统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也 将退出。8.2丄Java的异常处理机制就会生成一个JAVA(2)声明抛弃异常当Java程序运行时系统得到一个异常对彖时,如果一个方法并不知道如何 处理所出现的异常,则可在方法声明时,声明抛弃(throws)异常。前面已纟仝提到,Java 足采用廁向刈象的方法来处理借決的,-个丹常爭件足 由一个片常对象來
9、代衣的-这些异常对象都对T javaJang.Throwable 及其子 类 a 下面我们就来看下杲常类的层次。在 java 类库的每个包中都定义 f fl d 的异常类,所有这些类都直接或间接地 继承于Throwable 图 8J 列举了 些丹常类并指明它们的继承关系。从图 8-lnj 以看出,Java 屮的井常事件分为两大类。类继承 J 炎 Error.它的继 承关系如下上javaan g.Objectjavadng .Throwablejavaang. ErrorJAVAJAVA常见的错误类 /jAnnotationFormatError, Assertion Error, AWTErr
10、or, LinkageError,CoderMa If u nction Error, Factory Conf ig u ration E rror, ThreadDeath,VirtualMachineError, TransformerFactoryConfigurationError 等,包括动态链接失 败、线程死锁、图形界面错误.虎拟机错误等,通常 Java 程序不应该捕获这类片 常,也不会抛介:这种异常。刃外类井常则继承于类 Exception,这是 JavafV.Jp 中所人量处理的杲常。它的继承 关蔡如卞$java Jang.Objectjavaang.Th rowa blej
11、ava.lang.Exception常见的斤常灸自:AcINotFoundException, ApplicationException, AWTException,BackingStoreException, ClassNotFoundException, CloneNotSupportedException, DataFormatException, DestroyFailedException, ExecutionException, PrintException,GeneraISecurityException, InterruptedException,In validPrefere
12、 rKesFonnatException,Parse Exception, RuntimeException,SAXException, SQLException, TimeoutException, TransformerException,UnsupportedCallbackException, UnsupportedLookAndFeelException,URISyntaxException, UserException, XAException, XMLParseException,XPathException 等其屮包描J运行时异常&非运行时异常。2.2异JAVAL_常见
13、的非运行时并常如卜:(1) ClassNotFoundException :找不到类或接口所产生的异常(2) CloneNotSupportedException:使用对象的 clone 方法但无法执行 Cloneable 所产生的异常。IllegalAccessException :类定义不明确所产牛的异常。例如:类不为 public , 或是包含一个类定义在另一个类库内。(4) IOException :在一般帖况下不能完成 I/O 操作所产生的异常。EOFException:打开文件没右数据町以读取所产空的异常FileNotFoundException :在文件系统中,找不到文件名称或路
14、径所产生InterruptedlOException:目前线程等待执行,另一线程中断目前线程 I/O 运行所 产生的异常在 Sun 公司提供的各种 API 包中,iiljava .io, java .net, java .awt 等,都提供不同怙况卜町能产生的异常。由于异常的种类非常多,需要读者实际运用中逐渐掌握。占8 2 2异常类的类层次常见的运行时异常如下:(1) 类型转换异常ClassCastExceptionStringstrNa(2) 数组超界异常(3) 指定数组维数为负值异常(4) 算术异常 ArithmeticException int b=0;a=500/b;(5) Java
15、系统内部异InternalExceptionJVM 抛出的异常(6) 类型不符合异 Vr/IncompatiblelypeException intn=12345;String s=(String)n;(7) 内存溢出异常 OutOfMemeoryException(8) 没有找到类定义异常NoClassDefFoundExceptionaClass aa=new aClas(); 但 aClass 类未泄义。(9) 空指针异常 NullPointerException int b;b0=99; 没有实例化,就访问,将产生空指 针。占8 2 2异常类的类层次JAVAJAVAjava.Ing.T
16、hrowable 类是所有 Error 类和 Exception 类的父类,常用的方法有 fillInStackTrace()、getLocalizedMessage() getMessage()、printStackTrace() printStackTrace(PrintStream)printStackTrace(Printwriter) toString()。(1) public native Throwable fillInStackTrace()填弓执行堆栈跟踪信息。该力法任应用程序豆新抛出错 i 吴或异常时仔用。例如:try a = b / c; catch(Arithmetic
17、Throwable e) a = Number.MAXVALUE;throw e.fillInStackTrace();(2) public String getLocalizedMessage()生成该 Throwable 的本地化描述。子类可能会覆盖该方法以便产生一个特定于本 地狗消息。对于未覆盖该方法的子类,缺省地返回调用 getMessage()的结果。8.2 3 Throwable类的常用方法(3) public String getMessage()返回该 throwable 对象的详细信息。如果该对彖没有详细信息则返回 null。(4) public void printStac
18、kTrace()把该 Throwable 和它的跟踪情况打印到标准错误流。(5) public void printStacklrace(PrintStream s)把该 Throwable 和它的跟踪情况打印到指定打印流。(6) public void printStackTrace(PrintWriter s)把该 Throwable 和它的跟踪情况打印到指定打印流。(7) public String toString()返回该 throwable 对象的嗇短字符串描述。&2.3JAVAJAVA方法可捕获该种异常。捕获异常是通iitry-catch-finally句实现的。其语 建
19、为:trycatch( ExceptionNamel e ) catch( ExceptionName2 e )finally1、try捕获异常的第一步是用try.选定捕获异常削范围,由try所限定的 代码块中的语句在执行过程中可能会生成异常对象并抛弁。J &3.1ttry-catch-finallycatch每个 try 代码块可以伴随-个或多个 catch 语句,用于处理 try 代码块屮所生成 的异常寄件。 catchin 句只需要一个形式参数來指明它所能够捕获的异常类型, 这个类必须是Throwable 的子类,运行时系统通过参数值把被抛弃的异常对象 传递给 catch 块。c
20、atch 块中的代码用來对异常对象进行处理,与访问其它对象一样,町以访问 个界常对彖的变量或调用它的方法。getMessage()是类 Throwable 所提供 的方法,用来得到有关异常事件的信息,类 Throwable 还提供了方法 printStackTrace()用来跟踪并常事件发生时执行堆栈的内容。例如:trycatch( FileNotFoundException e )System.out.println( e );System.out.printingnmessage: +e.getMessage();e.printStacklrace( System.out);catch(
21、IOException e )System.out.println( e );&3.:!&3.:!一个方一个方JAVAJAVAcatch语句的顺序捕获异常的顺丿了和 catch 语句的顺丿了有关,当捕获到一个异常时,剩下的catch 语句就不再进行匹配。因此,在安排 catch 语句的顺序时,首先应该捕 获最特殊的异常,然后再逐渐一般化。也就是一般先安排子类,再安排父类。 例如上面的程序如果安排成如下的形式:trycatch(IOException e )System.out.println( e );System.out.println( message: +e.getMes
22、sage();e.printStackl?ace( System.out);catch(FileNotFoundException e ) System.out.println( e );由于第一个catch语句首先得到I兀配, 第二个catch语句将不会被执行。 编译 时将出现“catchnot reached的错谋。 finally捕获异常的最后一步是通过 finally 语句为异常处理提供个统一的出口,使 得在控制流转到程序的其它部分以前,能够对程序的状态作统-的管理。一 般是用來关闭文件或释放其他的系统资源。虽然 finally 作为 tycatch-finally 结 构的一部分,但
23、在程序是可选的,也就是说可以没有 finally 语句。如果存在 finally 语句,不论 try 块中是否发生了异常,是否执行过 catch 语句,都要执行 finally 语句。另外,try-catch-finaltynj 以嵌套。&3丄try-catch-finally&3丄java Exception6Caught ExceptiongetMessage():My Exception getLocalizedMessage():My ExceptiontoString():javaang.Exception: My Exception prin tStacklrace
24、():java.lang.Exception: My Exceptionat Excep廿on6.main(Exception6java:5)8 3 IJ8-6】显示抛出异常详细情况的例子JAVAJAVAJ8-7 try-catch-finally嵌套的例子class MyoneException extendsException public class Trylnbed public static void main(String args) System.out.printlnCEntering first try block11);System.out.println(lEnterin
25、g second try block); try throw new MyoneException(); finally System.out.println(lfinally in 2nd try block11);/try-catch-finally嵌套在try限定的范宙内。 catch (MyoneException e) System.err.println(vlCaught MyoneException in 1st tryblock11); finally System.err.println(vfinally in 1st try block11);I 8 3 3抛岀异常序运行结
26、果如下:Entering first try blockEntering second try block finally in 2nd try blockCaught MyoneException in 1st try block finally in 1st try block8.3.3JAVAJAVA什么是异常&2 异常处理机制&3 异常的处理自己的异常类型。从Java异常类的结构层次可以看出,Java界常的公共父类为Throwableo在程序运行中可能出现两种问题:一种是由硕件系统或JVM导致的故障,Java定义该故障为Error 这类问题用户程序不能够处理的。另外一种
27、问题是程序运行错谋,Java定义为Exceptiono这种情况下, 可以通&4创&4创建用户异常类我们可以设计JAVAJAVA过程序设计的调整来实现异常处理。因此,用户定义的异常类型必须是Throwable的直接或间接子类。Java推荐用户的异常类型以Exception为直接父类。创建用户异常的方法如 下:class UserException extendsException UserExcepti on()super();其它语句&4创建用户异常类在使用异常时,有以下儿点建议需要注意:(1)对于运行时例外,如果不能预测它何时发生,程序町以不做处理,而是止 Java 虚机去处理它。(2) 如果程序可以预知运行时例外可能发生的地点和时间,则应该在程序中进行 处理,而不应简单地把它交给运行时系统。(3)在自定义异常类时,如果它所对应的异常事件通常总是在运行时产生的, 而且不容易预测它将在何时.何处发生,则可以把它定义为运行时例外,否则应 定义为非运行时例外。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 钢铁行业保安工作总结
- 点滴关怀感染科护士总结
- 科技在前台工作中的应用计划
- 网络科技行业客服工作总结
- 2024年税务师题库带答案(典型题)
- 2024年设备监理师考试题库及答案4
- 2024年认识冰的教案
- 2024年燃气管网工安全作业技能考试题库及答案
- 2024年花儿朵朵教案
- 2024年电工安全总结
- 网页设计与制作案例实战教程课件 第13章 综合实战案例
- 子长市长征文化运动公园项目社会稳定风险评估报告
- 形容词副词(专项训练)-2023年中考英语二轮复习
- 浙教版七年级科学上册期末综合素质检测含答案
- 2024年北京市离婚协议书样本
- 2019年海南省公务员考试申论真题(乙类)
- 北京邮电大学《操作系统》2022-2023学年期末试卷
- 2024-2025学年人教版高二上学期期末英语试题及解答参考
- 2023年税收基础知识考试试题库和答案解析
- 热气球项目可行性实施报告
- 双向进入交叉任职制度
评论
0/150
提交评论