Java try catch 代码块中调用层级 catch 的捕捉问题

2021-05-07 13:28:19 +08:00
 KomiSans

之前为了捕捉到 http 请求超时的异常信息想直接 catch 到异常内容,结果发现 catch 里面的代码块根本不走,后来自己试了一下如图: main 方法里的 catch 的 print 就是不会执行,后来自己在工具类里面设置静态属性来捕捉,第一次遇见这问题,可能是外面 catch 捕捉的块不在那个范围

2136 次点击
所在节点    Java
17 条回复
oneisall8955
2021-05-07 13:42:34 +08:00
不是,thro1 方法已经 catch 了啊,没有再 throw 出来,main 方法没有 catch 不是很正常吗
黑人问号.jpg
sheeta
2021-05-07 13:43:25 +08:00
因为已经被 catch 住了
FreeEx
2021-05-07 13:47:16 +08:00
建议重学 Java 。
dqzcwxb
2021-05-07 14:24:45 +08:00
建议黑马
tinyuu
2021-05-07 14:28:22 +08:00
thro1 再抛出去外面才能知道有异常啊
yazinnnn
2021-05-07 14:44:24 +08:00
换 go 吧,你适合 if err != nil
NeroKamin
2021-05-07 15:00:51 +08:00
thro1 里面不是已经 catch 了一次了吗,main 就 catch 不到异常了,异常被 catch 住一次后就不会再向外传递了,除非你再手动 throw 一次
KomiSans
2021-05-07 15:03:32 +08:00
当时发生这个问题还挺纳闷的,当前的 catch 的代码块
@sheeta 没错
Jooooooooo
2021-05-07 15:04:11 +08:00
thro1 里面已经把异常 catch 了, 外面就看不见这个异常了, 如果需要 main 里面也能看见这个异常

你需要在 thro1 的 catch 里面重新 throw 一份异常
KomiSans
2021-05-07 15:11:47 +08:00
@Jooooooooo 没必要了,只需要对当前的代码块异常进行捕捉就好
KomiSans
2021-05-07 15:26:35 +08:00
@FreeEx 确实,很多基础知识比较薄弱,上班也是 xjbx
lei2j
2021-05-07 15:52:19 +08:00
建议学一下异常捕获相关
passerbytiny
2021-05-07 16:01:36 +08:00
底下的人使出全力去拦截(捕获最高级别 java.lang.Exception ),上面的人一脸问号的说怎么我看不到问题。

楼主需要学习的可能不止是 Java 异常机制。
CantSee
2021-05-07 16:40:09 +08:00
你应该在 thro1 中重新 throw new 一个异常信息,这样异常已经被 catch 到了
Hurriance
2021-05-07 18:01:50 +08:00
thro1 中已经 catch 住异常了,自然 main()中就没异常了
zhoudaiyu
2021-05-07 19:12:10 +08:00
被调用方先抛出来然后自己又把异常处理了,就不会再抛出异常了,自然上游捕获不到,可以把 thro1 中的异常捕获去掉有异常直接抛就完了
dorothyREN
2021-05-07 22:52:06 +08:00
@passerbytiny #13 是不是子弹滞销,你想帮忙?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/775412

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX