出现的场景。

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后不知道怎么重新执行业务?看这个~相关推荐

  1. ros执行ctrl+c后修改程序运行时间

    运行ros节点执行ctrl+c后进程会转而执行rosspin()后面的程序,但是如果在一定时间内程序没有执行完毕,进程会强制退出,并抛出"escalating to SIGTERM" ...

  2. java try catch 异常后还会继续执行吗

    java try catch 异常后还会继续执行吗? catch 中如果你没有再抛出异常 , 那么catch之后的代码是可以继续执行的 , 但是try中 , 报错的那一行代码之后 一直到try结束为止 ...

  3. (转)java 中的try catch finally 语句中含有return语句的执行情况(总结版)

    原处:http://blog.csdn.net/ns_code/article/details/17485221 在这里看到了try catch finally块中含有return语句时程序执行的几种 ...

  4. Java中try catch finally语句中含有return语句的执行情况

    最近刷笔试题遇到的问题,记录下来. 在这里看到了try >但有一点是可以肯定的,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那 ...

  5. catch所有提示的异常类型,程序执行异常时却还是没有报错,异常没有被catch到吗[已解决]

    有时候调试程序的时候,真的是会让人心态有点崩溃,没有捕获到错误,但是程序运行出来的结果就是不对.按照我同事的话说:"我的代码有它自己的思想". 今天的情况是,在同步一个订单时,会先 ...

  6. java中return不运行的情况_Java中try catch finally语句中含return语句的执行情况总结-编程陷阱...

    前言:有java编程基础的人对java的异常处理机制都会有一定了解,而且可能感觉使用起来也比较简单,但如果在try catch finally语句块中遇到return语句,开发者可能就会遇到一些逻辑问 ...

  7. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗

    finally 一定会执行 try-catch-finally中return的执行情况: 在try中没有异常的情况下try.catch.finally的执行顺序 try --- finally 如果t ...

  8. try—catch—finally中,如果catch中return了,finally还会执行吗?

    1.如果catch中return了,finally还会执行吗 有异常 public class Test {public static void main(String[] args) {System ...

  9. 每日一道面试题之try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?

    finally代码段不是必须有的,但是如果有该代码段,必须紧跟在最后一个catch代码段后面,作为异常处理机制的统一出口(做善后处理),例如资源的关闭,无论try中是否产生异常,finally中的代码 ...

最新文章

  1. 【错误记录】Git 使用报错 ( git branch -a 仍能查询到已经删除的远程分支 )
  2. opencv java 摄像头_使用OpenCV Java创建Windows摄像头扫码程序
  3. leetcode-67-二进制求和
  4. Mr.J--JS事件监听(捕获冒泡)
  5. intellij idea主题
  6. 查找出现次数 oracle,ORACLE计算某个列中出现次数最多的值
  7. Linux系统(二)常用命令、进程管理
  8. 计算机国际标准编码,【计算机基础】常用编码格式
  9. 韩昊 20190919-2 功能测试
  10. 6 errors and 0 warnings potentially fixable with the `--fix` option.
  11. 板内板间通信协议及接口(六)RS232 RS485 RS422
  12. 阿里大佬自述:Java零基础到精通是这样炼成的!
  13. 步步为营——局域网调试NAS软路由“PVE+爱快+lede+黑群晖硬盘直通”并移植到宽带网(超详细,上篇)
  14. 小米笔记本 wifi 频繁断开重连 解决方案
  15. Java接口和包(超详细)
  16. 1833. 雪糕的最大数量
  17. 计算机的内存的作用是什么,电脑内存的作用是什么?
  18. 左倾堆(对两个优先队列合并)
  19. C语言基础语法【1】
  20. 揭露广告联盟不为人知的骗局

热门文章

  1. Spring Data MongoDB 使用group和unwind实现对数组数据进行简单统计
  2. 数据结构-二叉排序树(图文详细版)
  3. git如何同步本地仓库与远程仓库代码
  4. AdaBoost算法详解
  5. 宜宾市等2个市2008年《抗震加固工程计价定额》人工费调整批复〔2018〕10
  6. 生成器 Generator
  7. Matlab自学笔记:句柄、函数句柄、图像句柄(概念、用法、原理和区别)
  8. 【Js】【调试】VSCode中调试Js代码
  9. SYD定时器系统使用说明指导
  10. Xcode常用的快捷键