社区
Java
帖子详情
异常捕获与抛出的问题,什么时候应该try,什么时候应该throws,有没有一个标准或者规范?
signboy
2002-10-17 04:45:35
异常捕获与抛出的问题,什么时候应该try,什么时候应该throws,有没有一个标准或者规范?
为了省事,我现在所有的类的方法都用throws exception,感觉有点问题,想改,有不知如何下手,望各位赐教!
...全文
1334
26
打赏
收藏
异常捕获与抛出的问题,什么时候应该try,什么时候应该throws,有没有一个标准或者规范?
异常捕获与抛出的问题,什么时候应该try,什么时候应该throws,有没有一个标准或者规范? 为了省事,我现在所有的类的方法都用throws exception,感觉有点问题,想改,有不知如何下手,望各位赐教!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
26 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fishpard
2003-03-25
打赏
举报
回复
shoucang
Flying_kkd
2003-03-01
打赏
举报
回复
收藏的
qiri07
2003-03-01
打赏
举报
回复
gz
nullhue
2002-11-08
打赏
举报
回复
在需要扑捉的时候用try,需要抛出的时候throw
angel_cindy
2002-11-06
打赏
举报
回复
高效处理Java异常的两种方法
作者: BUILDER.COM
Thursday, May 16 2002 2:14 PM
按照Java语言的定义,所谓异常(Exception)指的就是向调用方法(calling method)表示发生非正常情况的习惯方式。本文讨论两种在处理异常时可兹利用的技术:异常嵌套和捕获适当的异常。
异常嵌套
你在试图捕获异常并打算扔出异常时该采取什么措施呢?同时,你希望原始的异常信息可用吗?
要回答以上的问题你不妨尝试一下NestedException类。具体的编程并不难,唯一要做的无非是利用构造器并且重载printStackTrace()以便显示出正确的数据。
此外,你还应当考虑封装Throwable而非Exception类来创建更具有重用性的组件。之后,你可以创建NestedRuntimeException变量封装Throwable但无需对其进行声明。清单A显示了完整的示例。
捕获适当的异常
正确地处理异常并不是一项轻松的任务,这是因为异常的处理有时会导致程序出现其他不明行为。不过,以下三条规则可以帮助你避免错误处理异常所可能遭遇的风险。
规则 #1: 总是捕获扔出异常的类型而不要理睬异常的超类。 清单B中的代码片断以示例的方式从错误编码和正确编码两个角度进行了说明。
为了遵守通常的代码习惯,你可以采用Exception类的大写字母作为变量名,如下所示:
catch(FileNotFoundException fnfe)
以及
catch(SQLException sqle)
规则 # 2: 决不让catch块留空。在很多情况下虽然确实编写了try/catch块但在代码的catch部分却什么都没有做。或者,如果采用了日志API(Logging API),那么请编写代码把异常写到日志中。
清单C 显示了以上编码的错误方式和正确方式。
规则 # 3: 决不扔出Exception基类的实例。开发人员应当总是扔出自己创建的异常类。
扔出异常的API很难处理。在声明方法扔出java.lang.Exception的情况下,清单A中所有的问题都会强加在API用户的头上,这样他们就无法以一种专业的编程方式来处理异常。通过为扔出API声明Exception类的子类这一举措,API开发人员就可以减轻用户的负担。
小结
以上提到的两种技术在处理异常时还可能用得更好、更适当。嵌套技术令异常扔到另一异常的内部,而捕获适当的异常令程序调试大大简化。
责任编辑:炒饭
zhu_liping
2002-11-06
打赏
举报
回复
好东西呀
kenpa
2002-10-22
打赏
举报
回复
不错, 收藏
DanielYWoo
2002-10-21
打赏
举报
回复
一句话总结:
除非你想把异常处理的责任交给调用者,一般不用throws, 。
解释:
比如你要读入一些文件,如果你想通知调用者,让调用者决定如何
处理这个异常,你就把这个异常throws给调用者;
如果你知道应该如何处理这个异常,或者你想把异常马上解决,
你可以就地catch她。
这完全取决于你想把异常自己立即处理还是想把处理责任返回给调用者。
取决于你的程序的结构和要求。
我的经验,大多是抛出后,被一级调用者处理,如果一级调用者再次抛出
此异常给二级调用者,很容易使问题复杂化;另外,还有一种情况就是
立即catch
miles_z
2002-10-21
打赏
举报
回复
理论上讲,应该捕捉一切可以预知的异常。当然,如果不是最终的使用者(客户程序员),而是类库提供者,可以throws,因为你可以确知这些异常会最终被处理;否则,一定要谨慎的使用throws,因为可能最终exception不会被正确处理。
的确是有这样的特例的。比如,在jsp里,即使不处理异常也不抛出,因为jsp本身机制,也不会报编译错。这个时候,可能会使这个异常成为类似于RuntimeException的东西,让最终用户看到。这种做法是不负责任的。
RuntimeException只是一个概念,实际上,本来所有的Exception都一样,本质上RuntimeException不会另行处理。所以,是不是throws,还是要根据你的总体设计中bean所处的地位来进行判断。
owenyang
2002-10-18
打赏
举报
回复
同意chenyuan_tongji(codeguru)的说法
lizl
2002-10-18
打赏
举报
回复
1、如果无法处理某个异常,那就不要捕获它。
2、如果捕获了一个异常,请不要胡乱处理它。
3、尽量在靠近异常被抛出的地方捕获异常。
4、在捕获异常的地方将它记录到日志中,除非您打算将它重新抛出。
5、按照您的异常处理必须多精细来构造您的方法。
6、需要用几种类型的异常就用几种,尤其是对于应用程序异常。
hello_wyq
2002-10-18
打赏
举报
回复
上层不关心的异常就catch掉,自己处理。
上层关心的异常一般都throw
Patrick_DK
2002-10-18
打赏
举报
回复
chenyuan_tongji(codeguru) ( )
说的不错
t
2002-10-18
打赏
举报
回复
原则:能处理就处理,不能处理就抛出
alphazhao
2002-10-18
打赏
举报
回复
异常的捕捉一般用try catch或throws都没有什么大的问题
但有的时候要看你对异常的需要或者处理
比如有的异常需要处理,这就涉及到处理的范围,是内部处理,还是在外围处理,另外还有的就是自定义异常,很多时候程序流程需要自定义异常来区分流向,需要向外抛出的。
btw:异常的throws切记要注意finally模式对其的屏蔽,这时java系统的一个较为严重的bug,详细参考thinking in java书中关于finally的解释
jiayp004
2002-10-18
打赏
举报
回复
gz
signboy
2002-10-18
打赏
举报
回复
尽情关注
freeboy777
2002-10-18
打赏
举报
回复
我对java异常的一点使用经验:
java异常可以分成两大类:Exception和RuntimeException(虽然RuntimeException是从Exception继承的)。exception异常代表“无法避免的异常” 如io异常 往往这类异常是由于外部原因造成的,程序本身无法保证他们不发生,所以这类异常必须捕获。如果在函数内部无法处理这个异常必须再次抛出(在函数后面用throws语句),如果什么都不做就出现编译错误。
runtimexception是指“可以避免的异常”,如 null引用异常,这类异常都是由程序内部原因造成的,是可以避免的。对于这类异常可以忽略他们,但一旦发生程序就会异常终止。这类异常对debug非常有帮助,当然,如果需要也可以catch
maxtiger
2002-10-18
打赏
举报
回复
哈哈……, hello_wyq(半瓶墨水) 说得很到位。。。
hotenM
2002-10-17
打赏
举报
回复
工具类里面throw
流程类里catch
加载更多回复(6)
Java
异常
处理
throw
s核心规则全解 | 编译/运行时
异常
处理、重写
规范
、
try
-catch联动实战
本文基于Java 21
规范
详细解析
throw
s关键字的4大核心规则:1)受检
异常
必须显式处理(
try
-catch或
throw
s),2)非受检
异常
可隐式
抛出
,3)子类重写方法时
异常
范围不能超过父类,4)
try
-catch处理后无需
throw
s声明。文章包含
标准
化代码模板、新手避坑指南和常见
问题
解答,帮助开发者掌握Java
异常
处理的最佳实践。
Java基础教程之
异常
捕获
处理·上
本文介绍了Java
异常
处理的核心概念与方法。主要内容包括:1)
异常
的基本概念,区分了语法错误和运行时
异常
;2)
异常
处理的三种格式(
try
-catch、
try
-catch-finally、
try
-finally)及其执行流程;3)
throw
和
throw
s关键字的作用与区别;4)Exception与RuntimeException的区别,后者在编译时不强制要求处理;5)
异常
处理的
标准
格式及实际应用场景。通过多个代码示例演示了
异常
捕获
、处理及
抛出
的具体实现方式,帮助读者掌握Java
异常
处理机制的基本原理和实用技巧
Android
异常
处理——
try
、catch、finally、
throw
、
throw
s
在代码的编写工作当中,我们会遇到很多有关错误处理的内容。 这个时候,你用的最多的
应该
是
try
-catch-finally,这样的句式。系统提供的这个句式极大方便我们的处理。我们可以
抛出
异常
、抓取
异常
、显示
异常
到前端。但工作中我们大部分时候需要分工合作,因此
规范
的写法显得尤为重要,不然,后端很多
异常
处理不
规范
,将会导致前端人员抓瞎! 后端
抛出
异常
、前端抓取
异常
,
应该
是我们基本的
规范
。 后端
抛出
的
第七单元【Java
异常
机制】
异常
体系、
捕获
抛出
、自定义
异常
、重写规则
NullPointerException(空指针
异常
)、ArrayIndexOutOfBounds(下标越界
异常
)、NumberFormatException(数字转换
异常
)、ClassCastException(类型强转
异常
)。1. RuntimeException运行时
异常
:编译无报错,运行时
抛出
,可选择性处理。父类
异常
可统一代理所有子类
异常
。2. 非运行时检查
异常
:编译器强制
捕获
/
抛出
,否则编译失败。1. 多catch结构:子类
异常
必须写在父类
异常
之前。2. 父方法无
异常
时,子类禁止
抛出
检查
异常
。
Java
异常
面试题(2026版)
序列号 内容 链接 1 Java基础知识面试题(2022版) https://blog.csdn.net/qq_43061290/article/details/124023797 2 Java集合容器面试题(2022版) 待续… 3 Java
异常
面试题(2022版) 待续… 4 并发编程面试题 (2022版) 待续… 5 JVM面试题(2022版) 待续… 6 Spring面试题(2022版) 待续… 7 Spring MVC面试题(2022版) 待续… 8 S....
Java
51,408
社区成员
86,093
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章