快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
出 try-finally 对提高我们代码的质量和美观是多么的重要。

import java.io.*; /** *//** author by http://www.bt285.cn http://www.5a520.cn */ public class Trans { public static void main(String[] args) { try { BufferedReader rd=null; Writer wr=null; try { File srcFile = new File((args[0])); File dstFile = new File((args[1])); rd = new BufferedReader(new InputStreamReader(new FileInputStream(srcFile), args[2])); wr = new OutputStreamWriter(new FileOutputStream(dstFile), args[3]); while(true) { String sLine = rd.readLine(); if(sLine == null) break; wr.write(sLine); wr.write("\r\n"); } } finally { // 这里能保证在何种情况下,文件流的句柄都得以被正确关闭 // 该方法主要用于清理非内存性质的资源(垃圾回收机制无法 // 处理的资源,如数据库连接、 Socket 关闭、文件关闭等等)。 wr.flush(); wr.close(); rd.close(); } } catch(Exception ex) { ex.printStackTrace(); } } }

java异常处理笔记(2)

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

所有的异常都必须从 Throwable 继承而来

在 C++ 异常处理模型中,它给予程序员最大的自由度和发挥空间(这与 C++ 中所主导的设计思想是一致的),例如它允许程序员可以抛出任何它想要的异常对象,它可以是语言系统中原本所提供的各种简单数据类型(如 int 、 float 、 double 等),也可以是用户自定义的抽象数据对象(如 class 的 object 实例)。虽然说,无论从何个角度上考量,我们都应该把异常处理与面向对象紧密结合起来(采用带有继承特点的层次化的类对象结构来描述系统中的各种异常),但是 C++ 语言规范中并无此约束;况且,即便大家都不约而同地采用面向对象的方法来描述“异常”,但也会由于各个子系统(基础运行库)不是一个厂商(某一个人)所统一设计,所以导致每个子系统所设计出的异常对象系统彼此相差甚远。这给最终使用(重用)这些库的程序员带来了很大的不一致性,甚至是很大的麻烦,我们不仅需要花费很多很宝贵的时间来学习和熟悉这些不同的异常对象子系统;而且更大的问题是,这些不同子系统之间语义上的不一致,而造成程序员在最终处理这些异常时,将很难把它们统一起来,例如,MFC 库系统中,采用 CMemoryException 来表示一个与内存操作相关的异常;而其它的库系统中很可能就会采用另外一个 class 来表示内存操作的异常错误。本质上说,这是由于缺乏规范和统一所造成的恶劣后果,所以说,如果在语言设计的时候,就充分考虑到这些问题,把它们纳入语言的统一规范之中,这对广大的程序员来说,无疑是个天大的好事情。

Java 语言毫无疑问很好地做到了这一点,它要求 java 程序中(无论是谁写的代码),所有抛出( throw )的异常都必须是从 Throwable 派生而来,例如,下面的代码编译时就无法通过。

import java.io.*; /** *//** *author by http://www.bt285.cn http://www.5a520.cn  */ public class Trans { public static void main(String[] args) { try { BufferedReader rd=null; Writer wr=null; try { File srcFile = new File((args[0])); File dstFile = new File((args[1])); rd = new BufferedReader(new InputStreamReader(new FileInputStream(srcFile), args[2])); wr = new OutputStreamWriter(new FileOutputStream(dstFile), args[3]); // 编译时,这里将被报错 // 而正确的做法可以是: throw new Exception("error! test!"); if (rd == null || wr == null) throw new String("error! test!"); while(true) { String sLine = rd.readLine();

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号