出 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();
|