JAVA异常机制

来源:百度知道 编辑:UC知道 时间:2024/05/04 14:43:05
久了不用忘记了。如果
try{
Wookbook book=...;
.....
book.close();
}catch(Exception e){....}
finally
{....}
例如写Excel的例子,若代码正常可执行到book.close();若有异常,直接抛到catch就执行不了关闭语句,导致一直在打开状态。把book.close();写如finally又认不了book对象。请问这种结构应该如何写异常不管抛不抛异常都可以结束book。求教!!
有不有对象必须在try里的情况?

Wookbook book = null;
try {
book = ...;

} catch(...){...}
finally
{
if (book!=null)
book.close();
}

你可以在try里实例化对象,但必须在try外声明它。因为finally无法预知有多少对象在try块抛出异常之前未被声明,所以你必须在try块之外声明以保证finally中的对象都是已声明的。
考虑以下情况
try {
A a = new A();
B b = new B();
} catch (...) {...}
finally {
a.close();
b.close();
}
如果在A a = new A()时抛出异常,那么b将根本不曾出现。

Wookbook book = null;
try{
book = new Wookbook();
.....

}catch(Exception e){....}
finally
{book.close();}
改成这个样子就可以了,在try块外面声明变量

Wookbook book=null;
放到try的外面,再在try里面进行初始化,就可以了