Edesigner. 发表于 2018-9-19 22:32:14

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

导致后面的程序执行不完。

zhd1021 发表于 2018-9-19 22:35:16

需要捕获异常啊,try catch。

Edesigner. 发表于 2018-9-19 23:11:56

zhd1021 发表于 2018-9-19 22:35
需要捕获异常啊,try catch。

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

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

整个Thread就会结束掉

Edesigner. 发表于 2018-9-19 23:12:40

zhd1021 发表于 2018-9-19 22:35
需要捕获异常啊,try catch。

像楼上的你如何捕捉?

zhd1021 发表于 2018-9-19 23:14:28

Edesigner. 发表于 2018-9-19 23:12
像楼上的你如何捕捉?

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

Edesigner. 发表于 2018-9-19 23:24:33

zhd1021 发表于 2018-9-19 23:14
try{
if (str.equals(""))
{


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

gzhuli 发表于 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这是常识了吧。

Edesigner. 发表于 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)。不过你最后一句对我有帮助。

Edesigner. 发表于 2018-9-20 10:48:18

zhd1021 发表于 2018-9-19 23:14
try{
if (str.equals(""))
{


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

luobote55 发表于 2018-9-20 10:57:18

程序健壮,一个线程奔溃不影响其他任务。
一个单片机奔溃了就只能重启了。
异常处理最好的地方,你居然觉的他不好。。。我觉的你对jave有误解。。

jasonzhu8888 发表于 2018-9-20 14:06:22

不是所有的异常都需要捕获。一些很明显不允许的错误,就不应该捕获,就得抛出错误让你解决。如果把这些异常都捕获了,程序出问题你都不知道在哪里。

a136498491 发表于 2018-9-20 14:16:02

你要是怕崩,就上erlang

BD8NCF 发表于 2018-10-9 15:07:31

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

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

浮华一生 发表于 2018-10-9 15:26:42

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

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

gamalot 发表于 2018-10-9 20:35:46

这根本不是Java的问题,程序写得不严密,任何语言都有可能出现类似的问题

jasonzhu8888 发表于 2018-10-9 20:42:04

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

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

BD8NCF 发表于 2018-10-10 10:49:48

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

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

icoyool 发表于 2018-10-13 10:01:32

zhd1021 发表于 2018-9-19 23:14
try{
if (str.equals(""))
{


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

qq335702318 发表于 2018-10-13 10:06:59

本帖最后由 qq335702318 于 2018-10-13 10:08 编辑

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

dellric 发表于 2018-10-13 10:23:40

哈哈哈,我就是这样放弃JAVA的,否则到处都是try -- catch,感觉是个捡垃圾的

jasonzhu8888 发表于 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已经有那么庞大的体系、应用和开源内容,人家为啥
用的好好的呢!{:victory:}
页: [1]
查看完整版本: 我发现java有个不好的地方就是报异常后整个线程就结束了