第13章异常捕获和枚举类型

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

Throwable
Error
ClassNot Fo un dEx cept io n
IOEx cept io n AWTEx cept io n Run t imeExcept ion
其他 类
LinkageError
Arit hmet icEx cept io n NullPo interExcept ion
/** Set a new radius */ public void setRadius(double newRadius)
throws IllegalArgumentException { if (newRadius >= 0)
radius = newRadius; else
throw new IllegalArgumentException( "Radius cannot be negative");
8
必检异常和免检异常
Page 354
• RuntimeException, Error 以及它们的子类
都称为免检异常(unchecked exceptions).
所有其他异常都称为必检异常(checked exceptions).
– unchecked exception
• 是程序设计中不可重获的逻辑错误。
• public String toString()
– 返回3个字符串合起来的串,它们分别是:异 常类名的全称; “:”一个冒号和一个空格; getMessage()方法。
• public void printStackTrace()
– 在控制台上输出Throwable对象及其踪迹信息。
16
例13-8 声明、抛出和捕获异常 Δ
page 358
• 问题: 本例演示如何声明、抛出和捕获异 常,改写前面编写的setRadius 方法,如果 半径是负的,新的 setRadius 方法抛出一 个异常。
TestCircleWithException CircleWithException
17
例(续) Δ
• output
java.lang.IllegalArgumentException: Radius cannot be negative
handler for exception2; } ... catch (ExceptionN exVar3) {
handler for exceptionN; }
15
java.lang.Throwable 方法
• public String getMessage()
– 返回Throwable对象的详细信息
AWTException RuntimeException Several more classes
ArithmeticException NullPointerException
IndexOutOfBoundsException IllegalArgumentException
LinkageError
"The number entered is " + number);
}
catch (Exception ex) {
JOptionPane.showMessageDialog(null,
"Incorrect input: an integer is required");
捕获并处理这个异常后,程序控 }
Chapter 13
• 异常处理 • 补充:枚举类型
语法错误,编译错误,逻辑错误
• Syntax errors (语法错误)-编译过程中出现的错 误,通过编译器检测。 • Runtime errors (运行时错误)引起程序非正常 中断的错误。 • Logic errors (逻辑错误)指程序没有按期望的要 求执行。
catch exception
throw exception
11
声明异常
声明异常(declaring exceptions)-每个方法 都必须说明它可能抛出的必检异常的类型. 如:
public void myMethod() throws IOException {
}
public void myMethod() throws IOException, OtherException {
In dex Out OfBo un dsEx cept ion IllegalArgumentEx cept io n
其他 类
Virt ualMachin eError AWTError
其他 类
Runtime exceptions 是由 RuntimeException 类描述编 程错误,比如不合适的转换 ,访问一个越界数值或数值 错误等。运行异常通常由 JAVA虚拟机抛出。
declare exception
method1() {
try { invoke method2;
} catch (Exception ex) {
Process exception; } }
method2() throws Exception {
if (an error occurs) {
throw new Exception(); } }
Several more classes
Java 不能保证你的代
Error
码能够捕获或声明
unchecked
exceptions.
VirtualMachineError AWTError
Several more classes
Unchecked Exceptions
10
声明、抛出、捕获异常
Page 355
2
运行错误
import javax.swing.JOptionPane; public class Test {
public static void main(String[] args) { String input = JOptionPane.showInputDialog(null, "Please enter an integer"); int number = Integer.parseInt(input); // Display the result JOptionPane.showMessageDialog(null, "The number entered is " + number); System.exit(0);
18
例(续)
• 输出 (no try-catch block)
Exception in thread "main" java.lang.IllegalArgumentException: Radius cannot be negative
at CircleWithException.setRadius(CircleWithException.java:30) at CircleWithException.<init>(CircleWithException.java:15) at TestCircleWithException.main(TestCircleWithException.java:5)
}
14
捕获异常 Δ
page 357
try { statements; // Statements that may throw exceptions
} catch (Exception1 exVar1) {
handler for exception1; } catch (Exception2 exVar2) {
– checked exception
• 编译器强制程序员检查并处理异常
9
必检异常和免检异常
说明:Exception类及子 类都是是可以捕获的, 但是JVM只强制你捕获
checked Excepions.
Exception
Object
Throwable
ClassNotFoundException IOException
AWTError 其他类
Arit hmet icEx cept io n NullPo interExcept ion
In dex Out OfBo un dsEx cept ion IllegalArgumentEx cept io n
其他类
6
异常(Exceptions)
Exceptions 是由 Exception类描述的。 Exception类描述由程序 和外部环境引起的错误
Number of objects created: 1
System.out.println(ex); is equivalent to System.out.println(ex.toString());
说明:在此例中,由于IllegalArgumentException是一个RuntimeException (unchecked Exception),所以在测试程序中若没有编写try-catch代码,编译 时不会报错,只会在运行时抛出异常。(栈跟踪)
}
12
抛出异常
抛出异常(throwing an exception)程序检测 到一个错误后,创建一个适当类型异常的实例 并抛出它。 这里有一个例子:
throw new TheException();
TheException ex = new TheException(); throw ex;
13
抛出异常Δ
In dex Out OfBo un dsEx cept ion IllegalArgumentEx cept io n
LinkageError
其他类
Error
Virt ualMachin eError AWTError
其他类
7
Runtime Exceptions
Ex cept ion
Object
IllegalArgumentExce ption
其他类
Error
VirtualMachine Error AW TErro r
其他类
5
系统错误(System Errors)
ClassNot Fo un dEx cept io n
Ex cept ion
Object
Throwable
System errors 是由JAVA
Exce ption
Object
Th ro wa ble
IO Exce ption AWTExce ption Runtime Exce ption 其他类
Linkage Error
ArithmeticExce ptio n
NullPointerExce ptio n
IndexOutOfBoundsExce ption
} }
如果这行出现异常,将跳过其余的行,程序终止。
3
捕获运行错误
import javax.swing.JOptionPane;
public class Test {
public static void main(String[] args) {
try {
String input = JOptionPane.showInputDialog(null,
虚拟机抛出并在Error类
中描述的。Error类描述
内部的系统错误。这种错
Error
误很少发生,如果发生,
除了通知用户以及尽量稳
妥地结束程序外,几乎什
么也不能做。
IOEx cept io n AWTEx cept io n Run t imeExcept ion 其他类
LinkageError Virt ualMachin eError
,这些错误能通过程序 捕获和处理。
wk.baidu.com
Ex cept ion
Object
Throwable
ClassNot Fo un dEx cept io n IOEx cept io n
AWTEx cept io n Run t imeExcept ion
其他类
Arit hmet icEx cept io n NullPo interExcept ion
"Please enter an integer");
如果这行出现异常,就会跳过
int number = Integer.parseInt(input);
try 子句中其余的行,并把程序 // Display the result
控制转移到 catch 子句
JOptionPane.showMessageDialog(null,
制转移到 try-catch 块之后的第一条语句
System.out.println("Execution continues ..."); System.exit(0); } }
4
异常类(Exception Classes)
图见P353
Class No tFoun dEx ception
描述见P354
相关文档
最新文档