第7章 异常处理_第1页
第7章 异常处理_第2页
第7章 异常处理_第3页
第7章 异常处理_第4页
第7章 异常处理_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章异常处理

7.1异常的概念

7.2异常处理1教学目的和要求:理解什么是异常,了解异常发生的原因

掌握Java异常处理的机制

创建自己的异常类2重点:Java异常处理机制;Java内置异常类;如何自定义异常难点: 理解异常处理块中各个语句块的作用教学重点与难点

31 PublicclassHelloWorld{2 publicstaticvoidmain(Stringargs[]){3 inti=0;4 Stringg[]={"HelloWorld!","Hello!",5 "HELLOWORLD!"};6 while(i<4){7 System.out.println(g[i]);8 i++;9 }10 }11 }HelloWorld!Hello!HELLOWORLD!Java.lang.ArrayIndexOutOfBoundsException atHelloWorld.main(HelloWorld.java:7)4

7.1异常的概念异常(Exception)也称为例外,是一种程序运行时的错误。例如:试图打开的文件找不到内存空间不足除数为零用户输入数据错误在传统的编程中,由于没有异常处理机制,一旦出现异常,程序将中止。而我们希望程序不要因为一个小错误就停止运行。当错误发生时,程序能够自动处理,或者能够向用户提供一些与错误相关的信息。5

7.1.1Java异常处理机制

Java语言是一种容错性很强的语言,其中引入了异常处理机制。

Java的异常处理也是面向对象的,当一个异常发生时程序会生成一个异常对象,称之为抛出(throw)一个异常。异常处理的核心思想是:捕获(Catch)

经预先判断可能出错的代码段中可能产生的异常。6

Java异常处理由5个关键字实现:try、catch、throw、throws和finally。其中try用来执行一段程序,如果出现异常,则系统抛出(throw)一个异常对象,可以根据该对象的类型来捕获(catch)它并处理它。最后由finally语句块来进行收尾工作。下面是异常处理块的基本形式:

try{//可能产生异常的代码块thrownewExceptionType1();//抛出ExceptionType1类型的异常

}catch(ExceptionType1e){//捕获并处理ExceptionType1类型的异常。该代码段不一定会执行

}catch(ExceptionType2e){//捕获并处理ExceptionType2类型的异常。该代码段不一定会执行

}finally{//收尾工作,释放资源。该代码段一定会执行

}7

importjava.io.*; publicclassE7_1{ publicstaticvoidmain(Stringargs[]){

intb; try{

FileInputStream

fis=new

FileInputStream("test.txt"); while((b=fis.read())!=-1)

System.out.print((char)b);

fis.close(); } catch(Exceptione){

system.out.println("出错了,原因是:");

system.out.println(e.toString()); }} }8

Java异常处理机制是面向对象的。每发生一起异常就产生一个异常对象。在Java类库中定义了很多异常类。注意:所有异常类都是类

java.lang.Throwable

的子类。

ThrowableErrorExceptionVirtualMachineErrorAWTErrorRuntimeExceptionIOExceptionEOFExceptionFileNotFoundExceptionArithmeticExceptionNullPointerExceptionIndexOutOfBoundsException

7.1.2内置异常类LinkageErrorOutOfMemoryErrorStackOverflowErrorClassNotFoundExceptionAWTException9Throwable

类有两个直接子类:子类

Error代表一些很难恢复的严重的系统错误,不是用户程序本身所能控制的。所以一般不用捕获与处理Error,而是交给Java运行系统处理。子类Exception代表用户程序可以捕获的异常情况。子类RuntimeException代表程序设计或实现上的问题,如除数为零或者数组越界等。这类异常经常出现,如果全部做出处理,会影响程序的可读性和效率。所以这类异常,程序可以处理,也可以交给Java运行系统自动处理。其他子类(例如IOException,ClassNotFoundException

等)程序中必须捕获并处理这些异常,或者声明抛弃这些异常。ErrorExceptionRuntimeExceptionThrowableIOExceptionClassNotFoundException……107.2异常处理7.2.1捕获异常7.2.2声明抛弃异常7.2.3显示抛出异常7.2.4自定义异常117.2.1捕获异常捕获异常是通过try-catch-finally语句实现的。其中try语句不能单独使用,必须和catch或者finally语句配合使用。为了防止并处理一个运行时的错误,需要把可能出错的代码放进try语句块中。当try语句块中的某条语句发生异常,该块中余下的语句将不再执行,而是转到catch语句中去执行。12

importjava.io.*; publicclassE7_3{ publicstaticvoidmain(String

args[]){ try{

inti=7/0;

System.out.println("该语句会不会执行?"); } catch(ArithmeticExceptione){

System.out.println("出现错误:" +e.getMessage()); }} }try语句块catch语句块13catch语句catch(ArithmeticException

e)catch之后的括号中是一个参数e,e是算术异常类的一个对象。当try语句块中有异常发生时,Java系统会自动抛出一个异常对象;然后系统把这个异常对象的类型与catch块中的异常类型进行比较,如果匹配,则把抛出的异常对象传递给参数e。最后再执行catch语句块中的语句进行异常的处理。14多条catch语句如果try语句块中可能发生多种异常,则可以使用多个catch语句分别捕获;如果这些异常具有继承关系,则必须先捕获子类型的异常,再捕获父类型的异常。15

publicclassE7_5{ publicstaticvoidmain(String

args[]){ try{

inti=7/0;

System.out.println("该语句会不会执行?"); } catch(Exceptione){

System.out.println(e); } catch(ArithmeticExceptione){

System.out.println(e); }} }16finally语句块

finally语句在异常处理机制中起到收尾工作,用来保证程序的正确性。例如打开一个文件失败,程序处理完异常之后就会退出,但是这时如果文件还没有关闭,这样可能会造成文件内容的遗失,所以必须先关闭该文件,才能退出异常的处理。而关闭文件的操作就放在finally语句块中。17importjava.io.*;publicclassE7_6{ publicstaticvoidmain(String

args[]){ try{

inti=7/0;

FileInputStreamf=newFileInputStream("test.txt"); } catch(ArithmeticExceptione){

System.out.println(e); } catch(FileNotFoundExceptione){

System.out.println(e); } finally{

System.out.println("finally"); }} }187.2.2声明抛弃异常如果一个方法method()中可能产生一个异常,但是method()本身又不愿意或者没有能力处理该异常。则method()方法可以声明抛弃该异常,将该异常交给调用它的其他方法去处理。19importjava.io.*;publicclassE7_7{ voidmethod()throwsFileNotFoundException{

FileInputStreamf=newFileInputStream("test.txt"); } publicstaticvoidmain(String

args[]){ try{ E7_7i=newE7_7();

i.method(); } catch(FileNotFoundExceptione){

System.out.println(e); } }}20importjava.io.*;publicclassE7_8{ voidmethod()throwsFileNotFoundException{

FileInputStreamf=newFileInputStream("test.txt"); } publicstaticvoidmain(String

args[])throws

FileNotFoundException

{ E7_8i=newE7_8();

i.method(); }}Java运行系统如果要一次抛弃多个异常,则用逗号分隔开,如下所示:voidmethod()throwsIOException,FileNotFoundException{}217.2.3显示抛出异常通常,异常对象是由Java系统自动抛出(throw)的。程序员也可以在程序中根据条件显示抛出(throw)一个异常。throw语句之后的语句将不再执行,转到catch语句块中去执行。22importjava.io.*;publicclassE7_9{ voidmethod()throwsFileNotFoundException{ Strings=newString(); if(s.equals(""))

thrownewFileNotFoundException(); } publicstaticvoidmain(String

args[])throwsFileNotFoundException

{ E7_9i=newE7_9();

i.method(); }}thrownew异常类();237.2.4自定义异常前面,我们讨论的都是由Java

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论