try...catch执行了catch后不知道怎么重新执行业务?看这个~
出现的场景。
try…catch…是我们常用的用于处理运行错误的方法,比如IO流错误IOException,比如URL的异常ConnectException。那么在实际业务中(比如远程请求资源,却因为网络波动致使这次请求失败,从而走了catch,如果遇上了执行了catch后,依然希望重新执行try,需要如何做显然是头等大事。
如何来写。
先看一下我们常写的
try{//执行的代码
}catch(ConnectException ce){ce.printStackTrace();
}finally{//放一些不管什么情况下都要执行的代码,比如释放资源。
}
在上面的代码中,catch了,但是我们依然需要重新执行,那么可以这么改造
int flag = 0;
do{try{//执行的代码flag = 10;}catch(ConnectException ce){ce.printStackTrace();flag ++;}finally{//放一些不管什么情况下都要执行的代码,比如释放资源。}
}while(flag < 3);
套用循环,设置指标flag并赋值0。如果不走catch,那么flag = 10;反之则自增1。至于为什么用do{}while()循环而不是while循环,是因为do循环不管是否满足条件,do的内容都会执行一次。
为什么这么写。
那么问题来了,我为什么要这么写,而不是直接给个死循环。
问题在于,catch一旦执行,就会创建新的对象。大量的对象可能会造成内存溢出最终使得服务器瘫痪,所以使用flag做了重试的次数。以上面的例子,请求远程接口时网络波动了造成请求失败时,这样处理既不会对服务器内存造成太大的负担,又不会影响现有的业务。
如果有不正之处,欢迎各位的批评。如有改进之处,也欢迎大家的建议。
注意
flag = 10,在try里面无论如何也必须写在最下面。因为假如写在了上面或者中间,可能会导致还没到业务执行完的时候就对flag的值进行了变更,结果抛出异常,flag ++,那么flag会等于11,达不成while的条件,结果就是抛了异常,却一次重试都没有。
try...catch执行了catch后不知道怎么重新执行业务?看这个~相关推荐
- ros执行ctrl+c后修改程序运行时间
运行ros节点执行ctrl+c后进程会转而执行rosspin()后面的程序,但是如果在一定时间内程序没有执行完毕,进程会强制退出,并抛出"escalating to SIGTERM" ...
- java try catch 异常后还会继续执行吗
java try catch 异常后还会继续执行吗? catch 中如果你没有再抛出异常 , 那么catch之后的代码是可以继续执行的 , 但是try中 , 报错的那一行代码之后 一直到try结束为止 ...
- (转)java 中的try catch finally 语句中含有return语句的执行情况(总结版)
原处:http://blog.csdn.net/ns_code/article/details/17485221 在这里看到了try catch finally块中含有return语句时程序执行的几种 ...
- Java中try catch finally语句中含有return语句的执行情况
最近刷笔试题遇到的问题,记录下来. 在这里看到了try >但有一点是可以肯定的,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那 ...
- catch所有提示的异常类型,程序执行异常时却还是没有报错,异常没有被catch到吗[已解决]
有时候调试程序的时候,真的是会让人心态有点崩溃,没有捕获到错误,但是程序运行出来的结果就是不对.按照我同事的话说:"我的代码有它自己的思想". 今天的情况是,在同步一个订单时,会先 ...
- java中return不运行的情况_Java中try catch finally语句中含return语句的执行情况总结-编程陷阱...
前言:有java编程基础的人对java的异常处理机制都会有一定了解,而且可能感觉使用起来也比较简单,但如果在try catch finally语句块中遇到return语句,开发者可能就会遇到一些逻辑问 ...
- try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗
finally 一定会执行 try-catch-finally中return的执行情况: 在try中没有异常的情况下try.catch.finally的执行顺序 try --- finally 如果t ...
- try—catch—finally中,如果catch中return了,finally还会执行吗?
1.如果catch中return了,finally还会执行吗 有异常 public class Test {public static void main(String[] args) {System ...
- 每日一道面试题之try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
finally代码段不是必须有的,但是如果有该代码段,必须紧跟在最后一个catch代码段后面,作为异常处理机制的统一出口(做善后处理),例如资源的关闭,无论try中是否产生异常,finally中的代码 ...
最新文章
- 【错误记录】Git 使用报错 ( git branch -a 仍能查询到已经删除的远程分支 )
- opencv java 摄像头_使用OpenCV Java创建Windows摄像头扫码程序
- leetcode-67-二进制求和
- Mr.J--JS事件监听(捕获冒泡)
- intellij idea主题
- 查找出现次数 oracle,ORACLE计算某个列中出现次数最多的值
- Linux系统(二)常用命令、进程管理
- 计算机国际标准编码,【计算机基础】常用编码格式
- 韩昊 20190919-2 功能测试
- 6 errors and 0 warnings potentially fixable with the `--fix` option.
- 板内板间通信协议及接口(六)RS232 RS485 RS422
- 阿里大佬自述:Java零基础到精通是这样炼成的!
- 步步为营——局域网调试NAS软路由“PVE+爱快+lede+黑群晖硬盘直通”并移植到宽带网(超详细,上篇)
- 小米笔记本 wifi 频繁断开重连 解决方案
- Java接口和包(超详细)
- 1833. 雪糕的最大数量
- 计算机的内存的作用是什么,电脑内存的作用是什么?
- 左倾堆(对两个优先队列合并)
- C语言基础语法【1】
- 揭露广告联盟不为人知的骗局