标签:保存 return语句 抛出异常 contain java data- 嵌套 返回值 应该
return返回值使用栈保存,所以会
在finally中return或是抛出新的异常会导致原本的返回或者异常被覆盖,导致异常丢失
覆盖方法的时候只能抛出在基类方法的异常说明里列出过的异常,但是基类异常说明中的异常也不一定都要出现.
这点与继承中接口只能变大正好相反.
如果在构造器中执行了打开文件之类的操作,出现异常将不能被正确处理,因此编写构造器一定要特别小心.
使用finally无法正常清理的原因在于,构造器执行一半出现异常导致并没有初始化完成,而finaly中又会执行清理,这就会出现错误.
对于构造阶段可能出现异常且要求清理的类,可以使用嵌套的try-catch.
try{
InputFile in = new InputFile("clean.java");
try{
// 文件读取
}
catch(Exception e){
// lalala
}finally{
//清理
}
}catch(Exception e){
//lalala
}
这样就可以保证,当InputFile没有打开时进入外层catch不进行清理,而在内层出现异常时正常清理
这种用法在构造器不抛出任何异常时也应该运用,基本规则为:在创建需要清理的对象之后,立即进入一个try-cache-finally语句块.
抛出异常之后,异常处理系统会按照代码顺序找出最近的处理程序,找到之后就不再继续查找.查找时并不要求完全匹配,派生的对象也可以匹配基类的处理程序
标签:保存 return语句 抛出异常 contain java data- 嵌套 返回值 应该
原文地址:http://www.cnblogs.com/renluxiang/p/46486c3a4152315ad4f0cb73f25da549.html