最近看了一些java的东西,想把关于异常处理的相关知识来个自我总结。
1.当存在finally时不要使用return,break,continue等语句试图跳出段落
在try或者catch段落中最后使用return,break,continue等语句试图跳出段落,如果这时存在finally段落的话,那么在执行这些返回动作之前,需要先执行finally段落中的代码,这是java一个比较奇怪的地方。正是由于上述原因,如果使用了上述方式,将会造成一些难以察觉的问题出现。
2.finally中避免资源泄漏
有时在try中使用某些资源,比如打开数据库的连接,然后发生了异常,这时需要在finally中进行必要的处理,防止资源的泄漏,比如关闭上述数据库的连接。
3.try/catch与循环
因为把try/catch会把程序的执行速度放慢N倍,好比是小心翼翼地做事,所以一般建议把循环放到try/catch里面,而不是在循环里面反复执行try/catch。
4.当发生异常时,如果某一对象变为无效状态了,在对外抛出异常之前,需要把它恢复成有效状态。
通常的做法是在try之前先保留有效状态,然后在catch中将其恢复成正常状态。
5.关于throws语句的讨论
1.一旦在方法后加入throws语句,意味着所有的调用该方法的方法都会受到牵连,会使得让调用的那个方法继续添加throws语句,直到main方法为止。所以在设计类和方法的时候,应该在完成该方法设计的时候就添加好throws语句。
2.如果需要在子类中覆盖父类中的一个方法,而此方法又有throws语句,那么你的throws语句会有三种选择
(1)不使用throws语句;(2)使用相同throws语句,使用包含父类throws中子异常的throws语句。
3.如果在方法中抛出了父类异常和子类异常,建议在throws语句中全部列出,尽管你只一个父类异常是完全可以的。
今天先到这里,下次继续。
1.当存在finally时不要使用return,break,continue等语句试图跳出段落
在try或者catch段落中最后使用return,break,continue等语句试图跳出段落,如果这时存在finally段落的话,那么在执行这些返回动作之前,需要先执行finally段落中的代码,这是java一个比较奇怪的地方。正是由于上述原因,如果使用了上述方式,将会造成一些难以察觉的问题出现。
2.finally中避免资源泄漏
有时在try中使用某些资源,比如打开数据库的连接,然后发生了异常,这时需要在finally中进行必要的处理,防止资源的泄漏,比如关闭上述数据库的连接。
3.try/catch与循环
因为把try/catch会把程序的执行速度放慢N倍,好比是小心翼翼地做事,所以一般建议把循环放到try/catch里面,而不是在循环里面反复执行try/catch。
4.当发生异常时,如果某一对象变为无效状态了,在对外抛出异常之前,需要把它恢复成有效状态。
通常的做法是在try之前先保留有效状态,然后在catch中将其恢复成正常状态。
5.关于throws语句的讨论
1.一旦在方法后加入throws语句,意味着所有的调用该方法的方法都会受到牵连,会使得让调用的那个方法继续添加throws语句,直到main方法为止。所以在设计类和方法的时候,应该在完成该方法设计的时候就添加好throws语句。
2.如果需要在子类中覆盖父类中的一个方法,而此方法又有throws语句,那么你的throws语句会有三种选择
(1)不使用throws语句;(2)使用相同throws语句,使用包含父类throws中子异常的throws语句。
3.如果在方法中抛出了父类异常和子类异常,建议在throws语句中全部列出,尽管你只一个父类异常是完全可以的。
今天先到这里,下次继续。