社区
Java
帖子详情
异常捕获与抛出的问题,什么时候应该try,什么时候应该throws,有没有一个标准或者规范?
signboy
2002-10-17 04:45:35
异常捕获与抛出的问题,什么时候应该try,什么时候应该throws,有没有一个标准或者规范?
为了省事,我现在所有的类的方法都用throws exception,感觉有点问题,想改,有不知如何下手,望各位赐教!
...全文
1166
26
打赏
收藏
异常捕获与抛出的问题,什么时候应该try,什么时候应该throws,有没有一个标准或者规范?
异常捕获与抛出的问题,什么时候应该try,什么时候应该throws,有没有一个标准或者规范? 为了省事,我现在所有的类的方法都用throws exception,感觉有点问题,想改,有不知如何下手,望各位赐教!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)
什么是
异常
?为什么要
抛出
异常
?
throw
s和
throw
的区别
文章目录前言1.
异常
是什么?1.1 概述:
异常
就是程序出现了不正常的情况1.2 体系结构1.3 编译时
异常
和运行时
异常
的区别1.4
Throw
able成员方法:返回
异常
信息方法2. 怎么处理
异常
?2.1 JVM默认处理
异常
的方式2.2
try
- catch方式处理
异常
2.3
throw
s方式处理
异常
3. 为什么要
抛出
异常
?什么时候要
抛出
异常
?4.
throw
s和
throw
的区别 前言 在我们刚开始学习java时候,总是会有一点点困惑。什么是
异常
?怎么处理
异常
?为什么要
抛出
异常
?什么时候
java机制下什么时候需要
抛出
异常
?什么时候需要
捕获
异常
?
而第二种,用
try
…
try
里面放入可能会发生
异常
的语句块,如果在运行期间遇到了
异常
,则会交给catch来处理
异常
(catch可以是多个,处理不同的
异常
),finally则是无论
有没有
异常
发生,只要加上了就会运行。但有的时候我们会在
try
语句里执行别的函数比如B,这个函数B里我们假如触发了
异常
,它会调向
try
语句所在的函数A),寻找和它相匹配的catch语句,执行catch语句里面相应的
异常
处理程序;但是我们的
throw
语句主动
抛出
了
异常
,那么程序就会到catch里面找
有没有
这个
异常
,有的话进行处理。
Java
捕获
和
抛出
异常
异常
处理机制:
抛出
异常
和
捕获
异常
;
异常
处理的5个关键字:
try
, catch ,finally,
throw
,
throw
s
try
:监控区域catch:用于
捕获
异常
finally:处理善后工作,finally,即使catch没有
捕获
到,最后也一定会被执行
throw
:主动在方法里
抛出
异常
(是语句
抛出
一个
异常
,自己手动
抛出
某些特定类型的
异常
)
throw
s:在方法上里
抛出
异常
(是方法可能出现的
异常
用于
throw
s声明,交给上层调用,自身并不主动处理)实例: 结果:
捕获
异常
后: 结果:..........
java学习笔记48:
异常
的处理方式:
捕获
异常
(
try
...catch...)、
抛出
异常
(声明
异常
(
throw
s子句)),利用百度解决
异常
问题
,手动
抛出
异常
:自定义
异常
一、
捕获
异常
(
try
,catch,finally)
捕获
异常
是通过3个关键词来实现的:
try
-catch-finally。用
try
来执行一段程序,如果出现
异常
,系统
抛出
一个
异常
,可以通过它的类型来捕捉(catch)并处理它,最后一步是通过finally语句为
异常
处理提供
一个
统一的出口,finally所指定的代码都要被执行(catch语句可有多条;finally语句最多只能有一条,根据自己的需要可有...
什么是
异常
?为什么要
抛出
异常
?
文章目录 前言 1.
异常
是什么? 1.1 概述:
异常
就是程序出现了不正常的情况 1.2体系结构 1.3 编译时
异常
和运行时
异常
的区别 1.4
Throw
able成员方法:返回
异常
信息方法 2. 怎么处理
异常
? 2.1JVM默认处理
异常
的方式 2.2
try
- catch方式处理
异常
2.3
throw
s方式处理
异常
3. 为什么要
抛出
异常
?什么时候要
抛出
异常
? 4.
throw
s和
throw
的区别 前言 在我们刚开始学习java时候,总是会有一点点困惑。什么是
异常
?...
Java
51,397
社区成员
85,842
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章