异常处理机制(精)

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

例子2: public class ServerTimedOutException extends Exception { private String reason; private int port; public ServerTimedOutException(String reason,int port){ this.reason = reason; this.port = port; } public String getReason() { return reason; } public int getPort() { return port; } }
使用语句来抛出已经创建的异常: …… throw new ServerTimedOutException("Could not connect", 80); …… 8.10 异常实例 例子3:
public class exceptionDemo { public static void main(String[ ] args) { int i=0; String greetings[]={
public static void main(String[ ] args) {
int i=0; String greetings[]={
" hello world!",
"How are you!",
"Thank a lots!"
while (i<4) {
};
System.out.println(i+ " = " greetings[i]);
NoClassDefFoundException—程序无法找到指定的类文件.
为何要异常处理? 1.程序中可能有编程人员未想到的异常. 2.Java程序中有些语句必须有异常处理. 8.6 finally 当一个"异常"被抛出时,程序的执行就不再是线性的,跳 过某些行,甚至会由于没有与之匹配的catch子句而过早地返回。 有时确保一段代码不管发生什么"异常"都被执行到是必要的, 关键词finally就是用来标识这样一段代码的,可以将异常处理 之后的共同工作放于finally的程序块。 8.7 throw语句 throw语句用来明确地抛出一个"异常" 。首先,你必须得到 一个 Throwable 的实例的控制柄,通过参数传到 catch 子句,或 者用new操作符来创建一个。
catch (ArrayIndexOutOfBoundsException e){
System.out.println("index of array error"); } finally { System.out.println(“program is over");} } }
例子4: 考虑一个客户服务器程序。在客户代码中,要与服务 器连接,并希望服务器在5秒钟内响应。如果服务器没有响应, 那么,代码就如下所述抛出一个异常(如前述用户定义的 ServerTimedOutException)。 public void connectMe(String serverName) throws ServerTimedOutException { int success; int portToConnect = 80; success = open(serverName, portToConnect);
if (success == -1) { throw new ServerTimedOutException( "Could not connect", 80); } }
在调用connectMe方法的地方从里向外寻找含有与其匹 配的catch子句的try块。 例如: 在用户的类中有调用connectMe方法的代码: ... ... methodname1(arg-list) { ... ... try { .... ****.connectMe(“ftp.***.***”) .... } catch (ServerTimedOutException e) { ……} }
java.lang.ArithmeticException:/ by zero
at exceptionDemo1.main(exceptionDemo1.java:4)
8.4 异常处理 Java 的 " 异常处理 " 是通过 5 个关键词来实现的: try, catch, throw, throws和finally。用try来执行一段程序,如果出现"异常" , 系统抛出( throws) 一个 " 异常 " ,你可以通过它的类型来捕捉 (catch)它并处理,最后由finally来结束(finally可选)。 try { 程序块 } catch(ExceptionType1 e) {对ExceptionType1的处理 [ throw e; //再抛出这个“异
try{int d=0;int a=42/d;}
catch(ArithmeticException e){ System.out.println("division by zero"); } }
}
在某写情况下,同一段程序可能产生不止一种 " 异常 " 情况。 你可以放置多个 catch子句,其中每一种"异常"类型都将被检查, 第一个与之匹配的就会被执行。 常见异常的类型有:
ArithmeticException—整数被0除
NullPointerException—当对象没被实例化时,访问对象的属性 或方法的尝试 NegativeArraySizeException—创建带负维数大小的数组的尝试 ArrayIndexOutOfBoundsException—访问超过数组大小范围的一 个元素的尝试 NumberFormatException—试图将数值直接转换字符串 例: n=199 String str=(String)(n);
public class exceptionDemo {
public static void main(String[ ] args) { int i=0; String greetings[]={ "hello world!", "How are you!",
"Thank a lots!"
};ቤተ መጻሕፍቲ ባይዱ
while (i<4) {
e)
{System.out.println("class no defined"); }
{
System.out.println("exit because of exception "); }
}
} }
对exceptionDemo1.java的异常处理: class exceptionDemo1{ public static void main(String args[]){
8.2 异常的类型 Throwable(表示所有的“异常”情况 )
Exception(是用户程序能 够捕捉到的“异常”情 况) … ……
Error(它定义了通常无法 捕捉到的“异常”) … …
RuntimeException, 它是程序运行时自 动地对某些错误作 出反应而产生的。

… …
8.3 未捕获的异常 任何没有被程序捕获的异常将最终被缺省处理程序处理. 例子1: class exceptionDemo1{
"hello world!",
" How are you!", " Thank a lots!" try { while (i<4) { System.out.println(i+ " = " greetings[i]); i++; } catch (ArithmeticException e) { System.out.println("division by zero"); } } };
try { System.out.println(i+ " = " greetings[i]);
i++; }
catch(ArrayIndexOutOfBoundsException catch(NoClassDefFoundException finally
e)
{System.out.println("greetings array index error"); }
常”]}
catch(ExceptionType2 e) …… finally { 程序块 } {对ExceptionType2的处理 }
8.5 try与catch 通常我们希望自己来处理“异常”并继续运行。可以用try来 指定一块预防或监控所有"异常"的的程序。紧跟在try程序后面, 应包含一个catch子句来指定你想要捕捉的"异常"的类型。例如, 下面的例子是在前面的例子的基础上构造的,但它包含一个try程 序块和一个catch子句。 对引例exceptionDemo.java的异常处理:
public static void main(String args[]){
int d=0; int a=42/d; } }
当Java执行这个除法时,由于分母是0,就会构造一个"异 常"对象来使程序停下来并处理这个错误情况,在运行时"抛出 " (throw)这个"异常" 。缺省的处理器打印Exception的字符字 样和发生“异常”的地点。
第八章 异常处理机制
"异常"指的是程序运行时出现的非正常情况。
Java对"异常"的处理是面向对象的。一个Java的Exception是 一个描述"异常"情况的对象。当出现"异常"情况时,一个 Exception对象就产生了,并放到产生这个"异常" 的成员函数里。 8.1 引例
public class exceptionDemo {
下面是throw语句的通常格式:
throw ThrowableInstance;
程序会在throw语句后立即终止,它后面的语句执行不到,然后 在包含它的所有try块中从里向外寻找含有与其匹配的catch子句 的try块。 8.8 throws语句 throws用来标明一个成员方法(函数)可能抛出的各种“异常” 。 下面是throws语句的通常格式: type method-name(arg-list) throws exception-list{} 8.9 创建自己的异常 用户定义异常是通过扩展Exception类来创建的。这种异常 类可以包含一个"普通"类所包含的任何东西。 下面就是一个用户定义异常类例子,它包含一个构造方法、 两个变量以及方法:
i++;
} }
}
程序结果:
e:\student\> java HelloWorld
0=hello world! 1=How are you! 2=Thank a lots! java.lang.ArrayIndexOutOfBoundsException:atHelloWorld.main(H elloWorld.java:12)
也可能部分地处理一个异常然后也将它抛出。如: try { ..... } catch (ServerTimedOutException e) { System.out.println("Error caught "); throw e; }
相关文档
最新文档