搜索
bottom↓
回复: 20

我发现java有个不好的地方就是报异常后整个线程就结束了

[复制链接]

出45入88汤圆

发表于 2018-9-19 22:32:14 | 显示全部楼层 |阅读模式
导致后面的程序执行不完。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2018-9-19 22:35:16 | 显示全部楼层
需要捕获异常啊,try catch。

出45入88汤圆

 楼主| 发表于 2018-9-19 23:11:56 | 显示全部楼层
zhd1021 发表于 2018-9-19 22:35
需要捕获异常啊,try catch。

捕捉也一样,如:
String str=null;

if (str.equals(""))
{
}

整个Thread就会结束掉

出45入88汤圆

 楼主| 发表于 2018-9-19 23:12:40 | 显示全部楼层
zhd1021 发表于 2018-9-19 22:35
需要捕获异常啊,try catch。

像楼上的你如何捕捉?

出0入0汤圆

发表于 2018-9-19 23:14:28 | 显示全部楼层
Edesigner. 发表于 2018-9-19 23:12
像楼上的你如何捕捉?

try{
if (str.equals(""))
{
}
}catch{}

出45入88汤圆

 楼主| 发表于 2018-9-19 23:24:33 | 显示全部楼层
zhd1021 发表于 2018-9-19 23:14
try{
if (str.equals(""))
{

问题是你不知道str竟然会是null,实际运行时随机状态下才会出现。

出0入618汤圆

发表于 2018-9-19 23:49:38 | 显示全部楼层
本帖最后由 gzhuli 于 2018-9-19 23:52 编辑

楼主,北大青鸟读了3个月出来的都知道要写成"".equals(str)……
而且apache commons-lang库里面一大堆工具类,StringUtils.isEmpty(str)判断空字符串,StringUtils.equals(str1, str2)比较字符串,这些方法都是null safe的。
退一万步讲,最起码也要在线程主函数包个try catch这是常识了吧。

出45入88汤圆

 楼主| 发表于 2018-9-20 07:07:33 | 显示全部楼层
本帖最后由 Edesigner. 于 2018-9-20 07:09 编辑
gzhuli 发表于 2018-9-19 23:49
楼主,北大青鸟读了3个月出来的都知道要写成"".equals(str)……
而且apache commons-lang库里面一大堆工具 ...


多谢大师指教。java不是强项,我只是举例,如果只是null原因还可以加个if(str!=null)。不过你最后一句对我有帮助。

出45入88汤圆

 楼主| 发表于 2018-9-20 10:48:18 | 显示全部楼层
zhd1021 发表于 2018-9-19 23:14
try{
if (str.equals(""))
{

经过 测试加了异常捕捉后,确定是没有结束线程了。谢谢

出0入0汤圆

发表于 2018-9-20 10:57:18 | 显示全部楼层
程序健壮,一个线程奔溃不影响其他任务。
一个单片机奔溃了就只能重启了。
异常处理最好的地方,你居然觉的他不好。。。我觉的你对jave有误解。。

出0入46汤圆

发表于 2018-9-20 14:06:22 | 显示全部楼层
不是所有的异常都需要捕获。一些很明显不允许的错误,就不应该捕获,就得抛出错误让你解决。如果把这些异常都捕获了,程序出问题你都不知道在哪里。

出0入0汤圆

发表于 2018-9-20 14:16:02 | 显示全部楼层
你要是怕崩,就上erlang

出0入0汤圆

发表于 2018-10-9 15:07:31 | 显示全部楼层
jasonzhu8888 发表于 2018-9-20 14:06
不是所有的异常都需要捕获。一些很明显不允许的错误,就不应该捕获,就得抛出错误让你解决。如果把这些异常 ...

看来你的异常的理解有误。
捕获异常的目的不是为了掩盖异常,而是为了处理异常。不捕获,你怎么知道发生异常了?怎么处理?

出0入0汤圆

发表于 2018-10-9 15:26:42 | 显示全部楼层
BD8NCF 发表于 2018-10-9 15:07
看来你的异常的理解有误。
捕获异常的目的不是为了掩盖异常,而是为了处理异常。不捕获,你怎么知道发生 ...

发生异常会挂掉。所以 一般是捕获自己确定会发生的异常并处理。 其他等着它出现 挂掉 然后处理BUG

出0入0汤圆

发表于 2018-10-9 20:35:46 | 显示全部楼层
这根本不是Java的问题,程序写得不严密,任何语言都有可能出现类似的问题

出0入46汤圆

发表于 2018-10-9 20:42:04 | 显示全部楼层
BD8NCF 发表于 2018-10-9 15:07
看来你的异常的理解有误。
捕获异常的目的不是为了掩盖异常,而是为了处理异常。不捕获,你怎么知道发生 ...

服务端系统有日志啊。出现问题,查日志解决就是了啊。就算你自己处理,思路和日志差不多,主要体现在哪里把这个异常展示出来而已。你看我理解还有错误么?

出0入0汤圆

发表于 2018-10-10 10:49:48 | 显示全部楼层
jasonzhu8888 发表于 2018-10-9 20:42
服务端系统有日志啊。出现问题,查日志解决就是了啊。就算你自己处理,思路和日志差不多,主要体现在哪里 ...

对对。就是这个意思。
发生异常,表示程序或数据有问题,一般在异常处理部分记录日志,然后尽量把程序恢复到能正常运行的状态,尽量减小损失,例如一些变量的重新初始化、设备占用的释放、信号量的处理等等。

出0入8汤圆

发表于 2018-10-13 10:01:32 来自手机 | 显示全部楼层
zhd1021 发表于 2018-9-19 23:14
try{
if (str.equals(""))
{

这样是你的不对,建议你学kotlin

出0入0汤圆

发表于 2018-10-13 10:06:59 | 显示全部楼层
本帖最后由 qq335702318 于 2018-10-13 10:08 编辑

好奇古大师是如何同时精通各种技术的
而且还都非常深入,同时经验与理论并兼
不是想拍马屁,难道大师的学习效率非一般的高?
所有东西都能够过目不忘一学就会?
我感觉在技术这块真的是学海无涯苦做舟呢

出0入71汤圆

发表于 2018-10-13 10:23:40 | 显示全部楼层
哈哈哈,我就是这样放弃JAVA的,否则到处都是try -- catch,感觉是个捡垃圾的

出0入46汤圆

发表于 2018-10-13 11:19:34 | 显示全部楼层
dellric 发表于 2018-10-13 10:23
哈哈哈,我就是这样放弃JAVA的,否则到处都是try -- catch,感觉是个捡垃圾的

晕死,我给你总结一下吧,抛个砖:

异常处理,如果需要catch,说明你对这个catch有专门处理。比如网络程序,你需要用catch发现tcp链路是否正常,然后尝试重新建立链接。这个try-catch就非常重要。

其他大部分情况,则是bug,此时建议在实现函数中直接throws Exception。代码内部就不需要处理了。但这个也代表了程序不允许出现的错误。服务端往往通过日志程序自动记录;
客户端你可以做个总catch总提示。而对于多线程程序,则复杂一些,但思路还是一样的。一般来说,未处理的异常,即是不允许出现的异常。发现的时候,基本就当bug进行处理,
使得程序越来越稳定。

其实顶层业务程序是一通百通的,没必要一点东西不爽就放弃,能够合适的解决现实问题和能够让自己受益就行。最简单想想,java已经有那么庞大的体系、应用和开源内容,人家为啥
用的好好的呢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 17:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表