黑马程序员技术交流社区

标题: 异常问题 <已解决> [打印本页]

作者: 田林    时间: 2012-5-10 20:08
标题: 异常问题 <已解决>
本帖最后由 田林 于 2012-5-15 19:26 编辑

请问:try{
          }
         finally{
           }
这种格式只能测出有异常的代码块,又不能处理,那它又有什么具体作用呢?
作者: 李啸    时间: 2012-5-10 20:13
这段代码的意思就是说在try中的出现了异常会终止程序但是还是有部分代码希望会继续执行下去所以就有了finally语句块
作者: 于陈    时间: 2012-5-10 20:18
try{}finally{}给我们提供了一个“保证某个动作必然执行”的机会。

一个try-finally结构,只要try块开始执行了,finally块里面的代码保证执行一次并且只有一次。
打个比方,就象你上厕所,只要你一旦开始拉了,我们保证无论如何,是拉稀了也好,放屁了也罢,最终你肯定是擦了屁股走出卫生间。
应用try-finally,我们可以在异常满天飞的程序里保证我们的关键资源被按时正确清理。一个最常见的应用就是jdbc的Connection, Statement, ResultSet等。
作者: 黄坚声    时间: 2012-5-10 20:22
这种用法在实际开发中很常见,希望大家关注。
当发生异常时,这个时候,程序还有事情要处理,这样一来,常常把其要处理的工作交给相应的fianlly{}代码块。
例如,在操作数据库的过程中发生异常时用fianlly代码块来释放资源等。
作者: 黄坚声    时间: 2012-5-10 20:25
java中finally的作用
结论1:当try里面的代码没有异常的时候,会执行该try块对应的finally块,并继续执行finally之后的代码。

结论2:当try里面的代码出现异常的时候,会执行该try块对应的catch块和finally块,且即使catch中有返回finally也是要执行。也就是先执行完finally中的语句,再返回catch中的return。

结论3:相对于结论2,finally中如果有return的情况,那么即使catch中有return,这个return也不起作用,该方法调用要到finally中的return才返回。

总结:很多人说finally在程序中是一条一定会执行的语句,要他干嘛?这只能说你还没有到使用finally的境界,因为在排错中使用finally能够清晰的找到错误的原因,这是也很多有经验的java程序员必用的功能,不然开发他干嘛?


作者: 金肖    时间: 2012-5-10 20:34
try{
  执行语句
}
finally{
  存放必须要执行的语句,不管你前面的语句发发生了什么错误(比如,释放资源)
有种情况,System.exit(0),在finally之前的话,该语句就执行
}

作者: 小鹿叙鹿    时间: 2012-5-10 20:57
因为我们在进行的程序执行的时候,可能会开底层资源,我们用try把可能出异常的代码放在里面
如果代码出现异常,由于我们没有对异常进行处理,所以程序会继续的走下去,这叫做问题隐藏,
程序运行的时间一长,就会出现状况。
正如上面那位老兄说的,数据库资源是非常宝贵的,如果用完不及时关闭,在数据库连接池中的链接会
用光,到时没有空余的链接对数据库进行访问,那么你的程序也就废了。
所以必须把要关闭的资源放在finally中,因为无论怎样,函数在结束时最后走的就是finally代码块。
作者: 黄坚声    时间: 2012-5-11 11:32
java中finally的作用
结论1:当try里面的代码没有异常的时候,会执行该try块对应的finally块,并继续执行finally之后的代码。

结论2:当try里面的代码出现异常的时候,会执行该try块对应的catch块和finally块,且即使catch中有返回finally也是要执行。也就是先执行完finally中的语句,再返回catch中的return。

结论3:相对于结论2,finally中如果有return的情况,那么即使catch中有return,这个return也不起作用,该方法调用要到finally中的return才返回。

总结:很多人说finally在程序中是一条一定会执行的语句,要他干嘛?这只能说你还没有到使用finally的境界,因为在排错中使用finally能够清晰的找到错误的原因,这是也很多有经验的java程序员必用的功能,不然开发他干嘛?






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2