快速业务通道

java异常处理笔记 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
void test() { throw new Exception("test"); } } // 示例程序 3 ,这种写法又能够被编译通过 import java.io.*; public class Trans { public static void main(String[] args) { try { test(); } catch(Exception ex) { ex.printStackTrace(); } } // 由于函数声明了可能抛出 Exception 类型的异常 static void test() throws Exception { throw new Exception("test"); } } // 示例程序 4 ,它又不能够被编译通过了 import java.io.*; public class Trans { public static void main(String[] args) { try { // 虽然 test() 函数并没有真正抛出一个 Exception 类型的异常 // 但是由于它函数声明时,表示它可能抛出一个 Exception 类型的异常 // 所以,这里仍然不能被编译通过。 // 呵呵!体会到了 Java 异常处理模型的严谨吧! test(); } catch(IOException ex) { ex.printStackTrace(); } } static void test() throws Exception { } }

java异常处理笔记(5)

时间:2011-01-25 blogjava 江苏520

不知上面几个有联系的示例是否能够给大家带来“豁然开朗”的感觉,坦率的说,Java 提供的异常处理模型并不复杂,相信太多太多 Java 程序员有着比阿愚更深刻的认识。也许,阿愚对于这些简单而琐碎的事情如此婆婆妈妈絮叨个没完,有点招人笑话了!但是,阿愚还是坚持认为,非常有必要把这些简单但非常管用的准则阐述透彻。最后,补充一种例外情况,请看如下代码:

import java.io.*; public class Trans { public static void main(String[] args) { try { test(); } catch(Exception ex) { ex.printStackTrace(); } } static void test() throws Error { throw new Error(" 故意抛出一个 Error"); } }

朋友们!上面的程序能被编译通过吗?注意,按照刚才上面所总结出的规律:在 Java 的异常处理模型中,要求所有被抛出的异常都必须要有对应的 catch 块!那么上面的程序肯定不能被编译通过,因为 Error 和 Exception 都是从 Throwable 直接派生而来,而 test 函数声明了它可能抛出 Error 类型的异常,但在 main 函数中却并没有 catch(Error) 或 catch(Throwable) 块,所以它理当是会编译出错的!真的吗?不妨试试!呵呵!结果并非我们之预料,而它恰恰是正确编译通过了。为何? WHY ? WHY ?

其实,原因很简单,那就是因为 Error 异常的特殊性。 Java 异常处理模型中规定: Error 和从它派生而来的所有异常,都表示系统中出现了一个非常严重的异常错误,并且这个错误可能是应用程序所不能恢复的 (其实这在前面的内容中已提到过)。因此,如果系统中真的出现了一个 Error 类型的异常,那么则表明,系统已处于崩溃不可恢复的状态中,此时,作为编写 Java 应用程序的你,已经是没有必要(也没能力)来处理此等异常错误。所以,javac 编译器就没有必要来保证:“在编译时,所有的 Error 异常都有其对应的错误处理模块”。当然,Error 类型的异常一般都是由系统遇到致命的错误时所抛出的,它最后也由 Java 虚拟机所处理。而作为 Java 程序员的你,可能永远也不会考虑抛出一个 Error 类型的异常。因此 Error 是一个特例情况!

特别关注一下 RuntimeException

上面刚刚讨论了一下 Error 类型的异常处理情况,Java 程序员一般无须关注它(处理这种异常)。另外,其实在 Exception 类型的异常对象中,也存在一种比较特别的“异常”类型,那就是 RuntimeException ,虽然它是直接从 Exception 派生而来,但是 Java 编译器( javac )对 RuntimeException 却是特殊待遇,而且是照顾有加。不信,看看下面的两个示例吧!代码如下:

// 示例程序 1 // 它不能编译通过

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号