java非常处理笔记[Java编程]
本文“java非常处理笔记[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
关于一个非常熟习 C++ 非常处理模子的程序员来说,它几近可以不经任何别的培训和学习,便可以完好承受和可以轻松地利用 Java 语言中的非常处理编程办法.这是因为 Java 语言中的非常处理模子几近与 C++ 中非常处理模子有 99% 的类似度,无论是从语法法则,还是语义上来说,它们二者都几近完好一致.
当然,假如你对 Java 语言中的非常处理模子有更多,或更深化的理解,你还是可以发现 Java 非常处理模子与 C++ 中非常处理模子还是存在不少差别的.是的,Java 语言本来就是 C++ 语言的完善改良版,所以,Java 语言中的非常处理模子也就必定会担当了 C++ 非常处理模子的气势和长处.但是,好的东西不但仅是需求担当长处,更重要的是需求“去其糟粕,取其精华”,需求发展!!!毫无疑问,Java 语言中的非常处理模子完好到达了这一“发展”高度.它比 C++ 非常处理模子更安全,更可高,更强盛和更丰富.
下面的内容中,阿愚不打算再向大家具体介绍一遍有关 Java 非常处理编程的具体语法和法则.因为这与 C++ 中的非常处理几近完好一样,并且这些底子知识在太多太多的有关 java 编程的书籍中都有具体阐述.而阿愚认为: 这里更需求的是总结,需求的是对比,需求的是重点突出,需求的是关键之处 .所以,下面侧重把 Java 语言中的非常处理模子与 C++ 非常处理模子展开对比,让我们透彻解析它到底有何发展?有何上风?与 C++ 非常处理模子到底有哪些细节上的差别?又为什么要这样做?
鉴戒并引进了 SEH 非常模子中的 try-finally 语法
要说 Java 非常处理模子与 C++ 中非常处理模子的最大差别之处,那就是在 Java 非常处理模子中引入了 try-finally 语法,阿愚认为这是从微软的 SEH 鉴戒而来.在前面的一些文章中,具体而深化阐述 SEH 非常处理模子的时刻,我们从中获知,SEH 主如果为 C 语言而计划的,便于第三厂商开辟的 Window 驱动程序有更好更高的安全保障.同时,SEH 非常处理模子中除了 try-except 来用于处理非常外,还有一个 try-finally 语法,它主要用来排除一些曾经分配的资源(由于非常呈现,而招致这些资源不可以按正常的次序被释放,还记得吗?这被称为“ UNWIND ”),try-finally 本质上有点近似于面向对象编程中的析构函数的作用,由于这项机制的存在,才招致 SEH 的强盛和风光非常.
目前,Java 非常处理模子也吸取了这项计划.可我们知道,无论是 JAVA 中,还是 C++ 中,它们都有“析构函数”呀!它们完好可以操纵面向的析构函数来自动释放资源呀!是的,没错!理论上是这样的.但是在实践中,我们大概会发现或常常碰到,仅仅操纵析构函数来释放资源,并非那么好使,比方,我们常常需求动态得从堆上分配的对象,这时,释放对象必必要显式地调用 delete 函数来触发该对象的析构函数的履行.假如这期间发生了非常,不但该对象在堆中的内存不能到达被释放的后果,并且,该对象的析构函数中释放更多资源的一些代码也不能得以履行.因此这种后果非常严重,这也算 C++ 非常处理模子中一种对比大的缺陷吧!(固然,C++ 有别的补偿办法,那就是操纵“智能指针”来保证一些对象的及时而有效地被释放).别的,其实很有很多近似的例子,比方关闭一个内核句柄等操作( CloseHandle ).
在 Java 语言中,由于它由于采取了垃圾回收技术,所以它能有效避免上述所讲的近似于 C++ 语言中的由于非常呈现所招致的那种资源不能得以精确释放的尴尬局面.但是,它仍旧还是在它的非常处理模子中引入了 try-finally 语法,因为,无论若何,它至少会给程序员带来了极大的便利,比方以下的程序片断,便可以充分反映出 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("rn");
}
}
finally
{
// 这里能保证在何种情形下,文件流的句柄都得以被精确关闭
// 该办法主要用于清理非内存性质的资源(垃圾回收机制无法
// 处理的资源,如数据库衔接、 Socket 关闭、文件关闭等等).
wr.flush();
wr.close();
rd.close();
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
以上是“java非常处理笔记[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |