第7章 异常处理和断言

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

例子
import java.io.*; public class E7_1{ public static void main(String args[ ]){ int b; try { FileInputStream fis=new FileInputStream("test.txt"); while ( (b=fis.read()) !=-1) System.out.print((char)b); fis.close(); } catch (Exception e) { system.out.println("出错了,原因是:"); system.out.println (e.toString()); } } }
在传统的编程中,由于没有异常处理机制,一旦出现异常, 程序将中止。 而我们希望程序不要因为一个小错误就停止运行。当错误 发生时,程序能够自动处理,或者能够向用户提供一些与错 6 误相关的信息。
7.1.1 Java 异常处理机制
Java 语言是一种容错性很强的语言,其中引入了异常处 理机制。 Java的异常处理也是面向对象的,当一个异常发生时程 序会生成一个异常对象,称之为抛出(throw)一个异常。 异常处理的核心思想是:捕获(Catch) 经预先判断可能出 错的代码段中可能产生的异常。
throw new 异常类( );
24
7.2.4 自定义异常


除了可以使用系统提供的内置的异常类之外,Java 还允许程序员自己来定义异常类。 自定义的异常类通常继承 Exception 类。
9
7.1.2 内置异常类
Java异常处理机制是面向对象的。每发生一起异常就产生一 个异常对象。 在Java类库中定义了很多异常类。所有异常类都是类 Java.lang.Throwable 的子类。
Error OutOfMemoryError LinkageError VirtualMachineError StackOverflowError AWTError ArithmeticException NullPointerException RuntimeException IndexOutOfBoundsException ClassNotFoundException Exception
21
import java.io.*; public class E7_8 { void method( ) throws FileNotFoundException { FileInputStream f= new FileInputStream("test.txt"); } public static void main(String args[]) throws FileNotFoundException { E7_8 i=new E7_8(); i.method ( ); } }
15
多条catch语句

如果try语句块中可能发生多种异常,则可以使用多个catch 语句分别捕获; 如果这些异常具有继承关系,则必须先捕获子类型的异常, 再捕获父类型的异常。
16
public class E7_5 { public static void main(String args[]) { try { int i= 7/0; System.out.println ("该语句会不会执行?"); } catch (Exception e) { System.out.println (e); } catch (ArithmeticException e) { System.out.println (e); } } }
7.2.2 声明抛弃异常

如果一个方法 method() 中可能产生一个异常,但是 method() 本身又无法处理该异常。 method() 方法可 以声明抛弃该异常,将该异常交给调用它的其他方法 去处理。
20
import java.io.*; public class E7_7 { void method( ) throws FileNotFoundException { FileInputStream f= new FileInputStream("test.txt"); } public static void main(String args[]) { try { E7_7 i=new E7_7(); i.method ( ); } catch (FileNotFoundException e) { System.out.println (e); } } }
18
import java.io.*; public class E7_6 { public static void main(String args[]) { try { int i=7/0; FileInputStream f= new FileInputStream("test.txt"); } catch (ArithmeticException e) { System.out.println (e); } catch (FileNotFoundException e) { System.out.println (e); } finally { System.out.println ("finally"); } } 19 }
17
finally 语句块
finally语句在异常处理机制中起到收尾工作,用来保证程序 的健壮性。 例如打开一个文件失败,程序处理完异常之后就会退出, 但是文件还没有关闭,这样可能会造成文件的破坏,所以 必须先关闭该文件,才能退出异常的处理。 关闭文件的操作就放在finally语句块中。
14

catch (ArithmeticException e) catch之后的括号中是一个参数e,e是算术异常类的一个对 象。 当try语句块中有异常发生时,系统会自动抛出一个异常对象; 然后把这个异常对象的类型与catch块中的异常类型进行比 较,如果匹配,则把抛出的异常对象传递给参数e。最后再 执行catch语句块中的语句进行异常的处理。
回顾
1. String类 2. StringBuffer 类 3. 字符串的比较

1
第七章 异常处理和断言
7.1 异常的概念 7.2 异常处理
7.3 断言
2
教学目的和要求:
理解什么是异常,了解异常发生的原因 掌握Java异常处理的机制 创建自己的异常类 掌握断言的使用
13
import java.io.*; try 语句块 public class E7_3 { public static void main(String args[]) { try { int i= 7/0; System.out.println ("该语句会不会执行?"); } catch (ArithmeticException e) { System.out.println ("出现错误:" + e.getMessage()); } } } catch 语句块

3
教学重点与难点

重点:
Java异常处理机制; Java内置异常类; 如何自定义异常 如何使用断言

难点: 理解异常处理块中各个语句块的作用
4
1 2 3 4 5 6 7 8 9 10 11
Public class HelloWorld{ public static void main(String args[ ]){ int i=0; String g[ ]={"Hello World!", "Hello!", "HELLO WORLD!"}; while ( i<4){ System.out.println(g[i]); i++; } } }
Java 运行系统


如果要一次抛弃多个异常,则用逗号分隔开,如下所示: void method () throws IOException, FileNotFoundException{ } 22
7.2.3 显示抛出异常


通常,异常对象是由系统自动抛出的。 程序员也可以在程序中根据条件显示抛出 (throw) 一 个异常。 throw语句之后的语句将不再执行,转到catch语句块 中去执行。
Throwable
AWTException
IOException EOFException FileNotFoundException
10
Error
Throwable
RuntimeException
IOException Exception …… ClassNotFoundException
Throwable 类有两个直接子类: ① 子类 Error 代表一些很难恢复的严重的系统错误,不是用户程序本身所能控制的。所以 一般不用捕获与处理Error,而是交给Java 运行系统处理。 ② 子类 Exception 代表用户程序可以捕获的异常情况。 a) 子类 RuntimeException 代表程序设计或实现上的问题,如除数为零或者数组越界等。 这类异常经常出现,如果全部做出处理,会影响程序的可读性和效率。 所以这类异常,程序可以不捕获,而是交给Java 运行系统自动处理。 b) 其他子类 (例如 IOException,ClassNotFoundException 等) 程序中必须捕获并处理这些异常,或者声明抛出。
11
7.2 异常处理
7.2.1 捕获异常 7.2.2 声明抛弃异常 7.2.3 显示抛出异常 7.2.4 自定义异常

12
7.2.1 捕获异常




捕获异常是通过 try-catch-finally 语句实现的。 try语句不能单独使用,必须和catch或者finally语句配 合使用。 为了防止并处理一个运行时的错误,只需要把可能出 错的代码放进一个try语句块中就可以。 当try语句块中的某条语句发生异常,该块中余下的 语句将不再执行,而是转到catch语句中去执行。
23
import java.io.*; public class E7_9 { void method( ) throws FileNotFoundException { String s= new String(); if (s.equals("")) throw new FileNotFoundException( ); } public static void main(String args[]) throws FileNotFoundException { E7_9 i=new E7_9(); i.method ( ); } }
Hello World! Hello! HELLO WORLD! Java.lang.ArrayIndexOutOfBoundsException at HelloWorld.main(HelloWorld.java:7)
5
7.1 异常的概念
异常(Exception) 也称为例外,是一种程序运行时的错误。 例如: 试图打开的文件找不到 内存空间不足 除数为零 用户输入数据错误
Βιβλιοθήκη Baidu
7
Java异常处理由5个关键字实现:try、catch、throw、throws和finally。 其中try用来执行一段程序,如果出现异常,则系统抛出(throw)一个 异常对象,可以根据该对象的类型来捕获(catch)它并处理它。最后 由 finally 语句块来进行收尾工作。 下面是异常处理块的基本形式: try { // 可能产生异常的代码块 throw new ExceptionType1(); //抛出ExceptionType1类型的异常 } catch(ExceptionType2 e) { // 捕获并处理ExceptionType2类型的异常。该代码段不一定会执行 } catch(ExceptionType3 e) { // 捕获并处理ExceptionType3类型的异常。该代码段不一定会执行 } finally { // 收尾工作,释放资源。该代码段一定会执行 8 }
相关文档
最新文档