【岁月留声(Java)】main方法不应该直接throws Exception_main方法抛出异常-程序员宅基地

技术标签: 岁月留声  java  异常捕获  

分析

为什么说main不应该直接抛出异常(注意,这里说的是“不应该”而不是“不能”,main方法是可以直接抛出异常的)?我个人觉得这个事情要两看,对于开发来说在main中抛异常还真的比较直观且方便调试。但事实上对于已经在运行的程序来说在main直接抛出异常会导致某些后续处理无法完成。

举个极端一点的例子,假如现在用到比较原始的jdbc连接查询数据。若在这个过程中发生异常并在main函数中直接抛出后结束,数据库连接将无法释放。

这时有的小伙伴会说”这都已经是main方法了,即使不用finally去处理也没有关系吧。反正程序结束后数据库回话也消失了”。的确,程序结束之后数据库会话也就结束了,但万一这个数据库处理过程是一个长事务处理(现象上像卡死但实际上还在运行,只是耗时较长)。这时,就需要手动发送一个断开连接的标识“告知”数据库,不然会话就会挂起直到数据库连接超时才会结束。但一般来说运维人员为了避免“超时时间过短”(著名的“com.MySQL.jdbc.CommunicationsException: The last packet successfully received from the server was xxxx seconds ago.”)异常,在设置数据库参数时将timeout值设得很高。

以至于在过往我们在某些情况下关闭了程序,但是数据库连接没有释放就是这个原因引起的…有点扯远了,因此我个人觉得throws是可以的,但最好在关键的代码中使用try catch来进行处理。

结论

对于以上说到的情况,我的main方法中采用try catch方法捕获异常:

public static void main(String args[]) {
    
 try {
    
    doSomething();
  } catch (Throwable t) {
    
    log.error(t);
    System.exit(1);
  }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kida_yuan/article/details/129582457

智能推荐

Cocos creator入门------鼠标触摸和键盘事件_cocoscreator鼠标点击了一下-程序员宅基地

文章浏览阅读4.1k次。鼠标事件代码如下: @property(cc.Node) myNode:cc.Node=null;//需要拖拽赋值 //检测鼠标点击 //初始化后监听鼠标事件 start() { this.myNode.on(cc.Node.EventType.MOUSE_DOWN, ..._cocoscreator鼠标点击了一下

微信小程序使用fixed定位的input输入框placeholder随屏幕滚动的bug_微信小程序 ios上input框不会跟着框移动-程序员宅基地

文章浏览阅读924次。解决方案:把input输入框改为textarea然后加上属性 fixed="true"就可以了_微信小程序 ios上input框不会跟着框移动

上海计算机应用能力大赛颁奖,喜报丨外语学院陶敏嘉同学团队获上海市计算机应用能力大赛一等奖!...-程序员宅基地

文章浏览阅读569次。2021年4月17日,第十三届上海市大学生计算机应用能力大赛决赛在云端落幕。英语专业2018级本科生陶敏嘉(项目负责人),计算机科学与技术专业2018级本科生刘陈陈、张启团队凭借作品《TQLWriter——在线英语写作推荐批改平台》斩获决赛一等奖!这是我院跨学科人才培养的新突破!此前,该团队也在第十四届华东师范大学计算机应用能力大赛中获得校决赛三等奖。第十三届上海市大学生计算机应用能力大赛由上海市..._陶敏嘉

Faster R-CNN论文翻译_application of faster r-cnn model on human running-程序员宅基地

文章浏览阅读3.3k次。Faster R-CNN是互怼完了的好基友一起合作出来的巅峰之作,本文翻译的比例比较小,主要因为本paper是前述paper的一个简单改进,方法清晰,想法自然。什么想法?就是把那个一直明明应该换掉却一直被几位大神挤牙膏般地拖着不换的选择性搜索算法,即区域推荐算法。在Fast R-CNN的基础上将区域推荐换成了神经网络,而且这个神经网络和Fast R-CNN的卷积网络一起复用,大大缩短了计算时间。同时mAP又上了一个台阶,我早就说过了,他们一定是在挤牙膏。_application of faster r-cnn model on human running pattern recognitions

Go 语言中的错误处理(Let‘s Go 三十二)_go intohex报错-程序员宅基地

文章浏览阅读95次。除了上面的 errors.New 用法之外,我们还可以实现 error 接口自定义一个 Error() 方法,来返回自定义的错误信息。return fmt . Sprintf("出现错误:%.0f 为负数" , e . Num) } func Sqrt(f float64)(float64 , error) {= nil {_go intohex报错

QT多线程(线程互斥)_qt 互斥锁-程序员宅基地

文章浏览阅读2.5k次,点赞5次,收藏14次。线程互斥是指在多线程并发执行时,为避免多个线程访问共享资源时发生冲突而采取的一种机制。本篇文章我们就这个问题来了解一下什么叫线程互斥,又如何解决线程互斥的问题。这篇文章讲解了线程的互斥和线程的死锁,并给出了线程死锁的解决方法。_qt 互斥锁

随便推点

CorelDRAW软件2024版本序列号激活码_cdr2024序列号-程序员宅基地

文章浏览阅读1.6k次,点赞18次,收藏23次。以往的CorelDRAW很受文字排版工作的设计师喜爱,它的“页面排序视图”功能,可以同时编辑多页面的排版,并且同时导出,节省很多时间,但其绘画功能没有板式功能全面。丰富的设计工具:CorelDRAW 提供了大量的设计工具和特效,包括形状工具、填充和渐变工具、特效和风格工具等,可以帮助设计师轻松制作出独特且富有创意的设计。CorelDRAW作为图形设计软件的代表,以其杰出和革新的特性赢得了长期的声誉和用户的赞赏,是一套屡获殊荣的图像编辑软件。机器学习的模型可以帮助提高您的设计能力并加快工作流程,让人惊艳。_cdr2024序列号

机器学习笔记(五)续——朴素贝叶斯算法的后验概率最大化含义_朴素贝叶斯最大化后验概率用损失函数怎么推导-程序员宅基地

文章浏览阅读5.4k次。上一节中讲了朴素贝叶斯算法将实例分到后验概率最大的类。这等价于期望风险最小化。假设使用0-1损失函数: L(Y,f(X))={1,0,Y≠f(X)Y=f(X) L(Y, f(X)) = \Bigg\{ \begin{array} {ll} 1, & Y \neq f(X) \\ 0, & Y = f(X) \end{array} 上式中的f(x)f(x)是分类_朴素贝叶斯最大化后验概率用损失函数怎么推导

python的函数和方法_python进阶之内置函数和语法糖触发魔法方法-程序员宅基地

文章浏览阅读71次。前言前面已经总结了关键字、运算符与魔法方法的对应关系,下面总结python内置函数对应的魔法方法。魔法方法数学计算abs(args):返回绝对值,调用__abs__;round(args):返回四舍五入的值,调用__round__;math.floor():向下取整,调用__floor__;math.ceil():向上取整,调用__ceil__;math.trunc():求一个值距离0最近的整数,..._ipython魔法方法和语法糖

【Linux】操纵进程(kill)_kill默认信号值-程序员宅基地

文章浏览阅读942次,点赞3次,收藏2次。本文探讨如何在 Linux 操纵进程。Linux 主要使用 kill 来操纵进程,即杀掉进程。kill 命令是通过发送特定的信号来操纵命令, 列出所有支持的信号。kill 命令发送的默认信号是 15(SIGTERM),即终止信号。另一个比较重要的是信号 9(SIGKILL),即强制终止信号。一般我们先使用 ps 或 top 找到需要终止的进程的 PID,然后将 PID 跟在 kill 后面即可杀掉进程。如果某些恶意进程杀不掉,可使用 强制杀掉。非必要情况,不要使用 ,因为强制终止进程可能会导致数据丢失或者_kill默认信号值

Android源码分析:AudioFlinger中的线程_mthread.promote-程序员宅基地

文章浏览阅读4.8k次。Track相关类概述下图是其继承关系图,继承在AudioBufferProvider之后,各种Track可以作为AudioBufferProvider的一种为AudioMixer提供音频数据缓冲。TrackBase是基类,Track作为普通的音轨类,用于音频播放;OutputTrack用于复制线程,相当于将声音同时输出到两个输出设备中。TrackBase在它的构造函数中,在ashm上为_mthread.promote

推荐文章

热门文章

相关标签