catch 与 finally 存在矛盾吗? 首先,必须承认,这种问题是存在的,确实会得不到异常其次,finially主要是解决资源泄漏问题,不应该在finally中返回值,你可以在你的try中返回。在次:不应该在异常处理中完成某些业务处理! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public class Test { public static void main(String[] args) throws Exception { String a = null; try{ a.length(); } catch(Exception e){ throw new Exception("aaa"); } finally{ System.out.println("bbbb"); } }}这个程序的输出是这样的:bbbbjava.lang.Exception: aaa也就是说虽然你在catch里捕获了这个异常,又抛出一个新的异常,但是程序还是会在最后的时刻来执行下finally里的语句的。这样的好处我想不要我多说了吧?:) 在次:不应该在异常处理中完成某些业务处理!-----------------------------------------在异常处理的时候完成某些业务处理也未尝不可吧。比如我插入一条的记录。当然要先查找数据库,以免该记录存在。某查找的时间抛出了NotFoundException的时候,才可以进行插入的啊。还有,楼主不好意思哟,没看清楚你的问题。finally一般是用来做最后的处理,所以经常用它来释放一些需要释放的资源,这一点楼上说的不错~:) finally中一般都是用来关闭未关闭的连接的 trycatchfinally结构中程序在try块捕获异常,跳转到相应的catch块内执行异常处理finally则是在退出该方法之前执行的,所以说不论正常或者是抛异常出去,都会执行finally中的语句,finally本身也可以抛异常也可以catch处理语句的异常,不过这时候就没有其他的finally来控制了。因此,在finally里面如果return 的话,那这个程序永远抛不出异常,道理等同于在catch块里return一般来说,最典型的应用就是插入数据的时候,在try块捕获SQL异常或者网络异常,执行回滚,然后在finally里面判断数据库连接是否关闭以及关闭没有关闭的数据库连接 楼上各位说的对,finally一般是用来释放一些资源。 to dreamnear(哟哟) ,我指的是一般不建议用异常处理代替某些逻辑处理,至于是不是要抛出NotFoundException,然后在执行插入操作,这个各有各的做法 如果我的话,会这样子写public class TestExp { public static void main(String[] args) throws Exception { String a = null; try{ a.length(); } catch(Exception e){ e.printStackTrace(); //如果我要找出原始的异常会加上这行, throw new MyException("aaa");//作为自己对异常补充,或者是自定义异常类(不是RuntimeExpcetion), } finally{ System.out.println("bbbb"); } }}最好根据语义来,要看具情况了。 如果在try-catch-finally中可能再会引发异常,必须再用try来括住。称之为异常嵌套。 解决的好习惯是自定义异常类。多覆盖(override)几个printStackTrace()方法啦。 ... finally块是无论如何都会执行到的,比如程序产生错误时释放一些连接,例如:数据库连接,文件流,Socket连接这些比较占资源的东西。楼主这种做法有点不太合乎逻辑。 排序问题 关于多线程 StringBuffer转成String类型输出有优势吗 请问此程序错在哪里?怎么改? 初学者提问,一个小问题, 为什么内部类不能有static方法和static字段? Java入门已一天的学生前来提问?(很遗憾!万分抱歉本人就剩35分了) 急,怎么将String中的"/"替换成"\"? 一个初学者经常遇到的问题,高手指点我一下?? 急!weblogic中如何配置WEB application? 三个问题 请问如何检测ObjectInputStream流是否到文件尾?
public static void main(String[] args) throws Exception {
String a = null;
try{
a.length();
}
catch(Exception e){
throw new Exception("aaa");
}
finally{
System.out.println("bbbb");
}
}
}这个程序的输出是这样的:
bbbb
java.lang.Exception: aaa也就是说虽然你在catch里捕获了这个异常,又抛出一个新的异常,但是程序还是会在最后的时刻来执行下finally里的语句的。这样的好处我想不要我多说了吧?:)
-----------------------------------------
在异常处理的时候完成某些业务处理也未尝不可吧。比如我插入一条的记录。当然要先查找数据库,以免该记录存在。某查找的时间抛出了NotFoundException的时候,才可以进行插入的啊。还有,楼主不好意思哟,没看清楚你的问题。finally一般是用来做最后的处理,所以经常用它来释放一些需要释放的资源,这一点楼上说的不错~:)
catch
finally
结构中
程序在try块捕获异常,跳转到相应的catch块内执行异常处理
finally则是在退出该方法之前执行的,所以说不论正常或者是抛异常出去,都会执行finally中的语句,finally本身也可以抛异常也可以catch处理语句的异常,不过这时候就没有其他的finally来控制了。
因此,在finally里面如果return 的话,那这个程序永远抛不出异常,道理等同于在catch块里return一般来说,最典型的应用就是插入数据的时候,在try块捕获SQL异常或者网络异常,执行回滚,然后在finally里面判断数据库连接是否关闭以及关闭没有关闭的数据库连接
public static void main(String[] args) throws Exception {
String a = null;
try{
a.length();
}
catch(Exception e){
e.printStackTrace(); //如果我要找出原始的异常会加上这行,
throw new MyException("aaa");//作为自己对异常补充,或者是自定义异常类(不是RuntimeExpcetion),
}
finally{
System.out.println("bbbb");
}
}
}最好根据语义来,要看具情况了。
多覆盖(override)几个printStackTrace()方法啦。 ...