通过异常处理错误(精)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
23
17
捕获与处理例外示例
Public static void main(String args[]){ int i = 0 ; String greetings[]={“Hello World!”,”Hello!”,”HELLO!”}; while (i<4){ try { Hello World! System.out.println(greetings[i]); This is always printed }catch(ArrayIndexOutOfBoundsException e){ Hello! System.out.println(“Re-setting Index Value”); This is always printed i=-1; }finally{ HELLO! System.out.println(“This is always printed”); This is always printed } Re-setting Index Value i++; This is always printed } }
被捕获例外的变量名称。 • Java statements: 当捕获到例外时执行的java语句
11
Finally语句块
将先前方法的状态清除,并可以将控制转移到程 序的其他地方。 finally 语句块无论是否发生异常都要执行。
12
例外处理——Try ,catch和finally 语句
1 Try{ 2 // code that might throw a partcular exception 3 }catch(MyExceptionType e){ 4 // code to excute if a MyExceptionType exception is thrown 5 }catch (Exception e){ 6 // code to execute if a general Exception exception is thrown 7 }finally{ }
Throwable
RuntimeException
Exception
IOException
FileNotFoundException
5
Error 很难恢复的严重错误,一般不由程序处理。
RuntimeException 程序设计或实现上的问题,如数组越界等。
其它例外 通常是由环境因素引起的,并且可以被处理的。 如文件不存在,无效URL等。
13
public void writeList() { PrintWriter out = null; try { System.out.println("Entering try statement"); out = new PrintWriter( new FileWriter("OutFile.txt")); for (int i = 0; i < size; i++) out.println("Value at: " + i + " = " + victor.elementAt(i)); } catch (ArrayIndexOutOfBoundsException e) { System.err.println("Caught ArrayIndexOutOfBoundsException: " + e.getMessage()); } catch (IOException e) { System.err.println("Caught IOException: " + e.getMessage()); } finally { if (out != null) { System.out.println("Closing PrintWriter"); out.close(); } else { System.out.println("PrintWriter not open"); } }}
6
例外处理
扑获并处理例示例:ListOfNumbers
import java.io.*; import java.util.Vector; public class ListOfNumbers { private Vector victor; private static final int size = 10; public ListOfNumbers () { victor = new Vector(size); for (int i = 0; i < size; i++) victor.addElement(new Integer(i)); } public void writeList() { printWriter out = new PrintWriter(new FileWriter("OutFile.txt")); for (int i = 0; i < size; i++) out.println("Value at: " + i + " = " + victor.elementAt(i)); out.close(); }}
•正常退出 Entering try statement Closing PrintWriter
15
多种例外的同时处理
16
例外处理可以针对这个体系中的任意一个类。
•叶结点:是具体、专用的例外处理; •中间结点:是通用的例外处理。可以处理该结 点及其子类类型的例外。
例:writeList 方法: try { ... } catch (Exception e) { System.err.println("Exception caught: " + e.getMessage()); }
22
获得例外并处理
Public void findServer(){ … try{ connectMe(defaultServer); }catch(ServerTimeOutException e){ System.out.println(“Server timed out, try another”); try{ connectMe(alternateServer); }catch(ServerTimeOutException e1){ System.out.println(“No server avaliable”); } }
Hello! HELLO WORLD! ng.ArrayIndexOutOfBoundsException at HelloWorld.main(HelloWorld.java:7)
3
Exception 的概念
Exception 是在程序运行时打断正常程序流程的 异常的情况 •试图打开的文件不存在 •网络链接中断 •操作符越界 •要加载类文件不存在
第九章 通过异常处理错误
1
Exceptions的概念
例外处理
自定义例外
2
1 2 3 4 5 6 7 8 9 10 11
Public class HelloWorld{ public static void main(String args[ ]){ int i=0; String greetings[ ]={ “Hello World!”,”Hello!”, “HELLO WORLD!!”}; while ( i<4){ System.out.println(greetings[i]); i++; } } } Hello World!
Catch语句块提供错误处理。 一般格式: catch (SomeThrowableObject variableName) { Java statements } • SomeThrowableObject:能够被处理的例外类名, 必须是throwable类的子类 • variableName: 是例外处理程序中能够引用的代表
8
捕获与处理例外
•Try 语句块 • catch 语句块 • finally 语句块
9
Try语句块
一般形式: try { Java statements //一条或多条可能产生例 外的java语句。 } try 语句后必须跟随至少一个catch或finally语句块。
10
Catch语句块
抛出产生的例外
Public void connectMe(String serverName) throws ServerTimeOutException{ int success ; int portToConnect = 80; success = open(serverName, portToConnect); if(success= -1){ throw new ServerTimedOutException( “Could not connect”,80); } }
14
writeList方法中的try语句块的执行可能有三种情况
•出现了IOException Entering try statement Caught IOException: OutFile.txt PrintWriter not open
•出现了数组越界错误 Entering try statement Caught ArrayIndexOutOfBoundsException: 10 >= 10 Closing PrintWriter
20
自定义例外
定义例外类,是Exception类的子类,可包含普通类的内容。 public class ServerTimeOutException extends Exception{ private String reason; private int port ; public ServerTimeOutException(String reason, int port){ this.reason = reason; this.port = port; } public String getReason(){ return reason; } public int getPort(){ return port; } 21 }
例: public Object pop() throws EmptyStackException { Object obj; if (size == 0) throw new EmptyStackException(); obj = objectAt(size - 1); setObjectAt(size - 1, null); size--; return obj; } 抛出例外的throw语句: throw someThrowableObject
18
例外处理——抛出例外
可能产生例外的方法表明将不处理该例外,而该例外将 被抛到调用该方法的程序。 例:public void troublesome( ) throws IOException{ ….. } 如果一个例外在返回到main()时还未被处理,则程序将 非正常终止。
19
例外处理——抛出例外
Java中定义了各种例外
4
Java中定义的例外
Java中定义了各种例外。ng.Throwable 是这些类的父类。 VirtualMachineError Error AWTError
ArithmeticException
NullPointerException IndexOutOfBoundsException EOFException
17
捕获与处理例外示例
Public static void main(String args[]){ int i = 0 ; String greetings[]={“Hello World!”,”Hello!”,”HELLO!”}; while (i<4){ try { Hello World! System.out.println(greetings[i]); This is always printed }catch(ArrayIndexOutOfBoundsException e){ Hello! System.out.println(“Re-setting Index Value”); This is always printed i=-1; }finally{ HELLO! System.out.println(“This is always printed”); This is always printed } Re-setting Index Value i++; This is always printed } }
被捕获例外的变量名称。 • Java statements: 当捕获到例外时执行的java语句
11
Finally语句块
将先前方法的状态清除,并可以将控制转移到程 序的其他地方。 finally 语句块无论是否发生异常都要执行。
12
例外处理——Try ,catch和finally 语句
1 Try{ 2 // code that might throw a partcular exception 3 }catch(MyExceptionType e){ 4 // code to excute if a MyExceptionType exception is thrown 5 }catch (Exception e){ 6 // code to execute if a general Exception exception is thrown 7 }finally{ }
Throwable
RuntimeException
Exception
IOException
FileNotFoundException
5
Error 很难恢复的严重错误,一般不由程序处理。
RuntimeException 程序设计或实现上的问题,如数组越界等。
其它例外 通常是由环境因素引起的,并且可以被处理的。 如文件不存在,无效URL等。
13
public void writeList() { PrintWriter out = null; try { System.out.println("Entering try statement"); out = new PrintWriter( new FileWriter("OutFile.txt")); for (int i = 0; i < size; i++) out.println("Value at: " + i + " = " + victor.elementAt(i)); } catch (ArrayIndexOutOfBoundsException e) { System.err.println("Caught ArrayIndexOutOfBoundsException: " + e.getMessage()); } catch (IOException e) { System.err.println("Caught IOException: " + e.getMessage()); } finally { if (out != null) { System.out.println("Closing PrintWriter"); out.close(); } else { System.out.println("PrintWriter not open"); } }}
6
例外处理
扑获并处理例示例:ListOfNumbers
import java.io.*; import java.util.Vector; public class ListOfNumbers { private Vector victor; private static final int size = 10; public ListOfNumbers () { victor = new Vector(size); for (int i = 0; i < size; i++) victor.addElement(new Integer(i)); } public void writeList() { printWriter out = new PrintWriter(new FileWriter("OutFile.txt")); for (int i = 0; i < size; i++) out.println("Value at: " + i + " = " + victor.elementAt(i)); out.close(); }}
•正常退出 Entering try statement Closing PrintWriter
15
多种例外的同时处理
16
例外处理可以针对这个体系中的任意一个类。
•叶结点:是具体、专用的例外处理; •中间结点:是通用的例外处理。可以处理该结 点及其子类类型的例外。
例:writeList 方法: try { ... } catch (Exception e) { System.err.println("Exception caught: " + e.getMessage()); }
22
获得例外并处理
Public void findServer(){ … try{ connectMe(defaultServer); }catch(ServerTimeOutException e){ System.out.println(“Server timed out, try another”); try{ connectMe(alternateServer); }catch(ServerTimeOutException e1){ System.out.println(“No server avaliable”); } }
Hello! HELLO WORLD! ng.ArrayIndexOutOfBoundsException at HelloWorld.main(HelloWorld.java:7)
3
Exception 的概念
Exception 是在程序运行时打断正常程序流程的 异常的情况 •试图打开的文件不存在 •网络链接中断 •操作符越界 •要加载类文件不存在
第九章 通过异常处理错误
1
Exceptions的概念
例外处理
自定义例外
2
1 2 3 4 5 6 7 8 9 10 11
Public class HelloWorld{ public static void main(String args[ ]){ int i=0; String greetings[ ]={ “Hello World!”,”Hello!”, “HELLO WORLD!!”}; while ( i<4){ System.out.println(greetings[i]); i++; } } } Hello World!
Catch语句块提供错误处理。 一般格式: catch (SomeThrowableObject variableName) { Java statements } • SomeThrowableObject:能够被处理的例外类名, 必须是throwable类的子类 • variableName: 是例外处理程序中能够引用的代表
8
捕获与处理例外
•Try 语句块 • catch 语句块 • finally 语句块
9
Try语句块
一般形式: try { Java statements //一条或多条可能产生例 外的java语句。 } try 语句后必须跟随至少一个catch或finally语句块。
10
Catch语句块
抛出产生的例外
Public void connectMe(String serverName) throws ServerTimeOutException{ int success ; int portToConnect = 80; success = open(serverName, portToConnect); if(success= -1){ throw new ServerTimedOutException( “Could not connect”,80); } }
14
writeList方法中的try语句块的执行可能有三种情况
•出现了IOException Entering try statement Caught IOException: OutFile.txt PrintWriter not open
•出现了数组越界错误 Entering try statement Caught ArrayIndexOutOfBoundsException: 10 >= 10 Closing PrintWriter
20
自定义例外
定义例外类,是Exception类的子类,可包含普通类的内容。 public class ServerTimeOutException extends Exception{ private String reason; private int port ; public ServerTimeOutException(String reason, int port){ this.reason = reason; this.port = port; } public String getReason(){ return reason; } public int getPort(){ return port; } 21 }
例: public Object pop() throws EmptyStackException { Object obj; if (size == 0) throw new EmptyStackException(); obj = objectAt(size - 1); setObjectAt(size - 1, null); size--; return obj; } 抛出例外的throw语句: throw someThrowableObject
18
例外处理——抛出例外
可能产生例外的方法表明将不处理该例外,而该例外将 被抛到调用该方法的程序。 例:public void troublesome( ) throws IOException{ ….. } 如果一个例外在返回到main()时还未被处理,则程序将 非正常终止。
19
例外处理——抛出例外
Java中定义了各种例外
4
Java中定义的例外
Java中定义了各种例外。ng.Throwable 是这些类的父类。 VirtualMachineError Error AWTError
ArithmeticException
NullPointerException IndexOutOfBoundsException EOFException