THINK IN JAVA里面的一个例题看不懂 90分答谢解答者

lixiaoxue85 2005-03-30 08:27:11
9.6.2 缺点:丢失的违例
一般情况下,Java的违例实施方案都显得十分出色。不幸的是,它依然存在一个缺点。尽管违例指出程序里存在一个危机,而且绝不应忽略,但一个违例仍有可能简单地“丢失”。在采用finally从句的一种特殊配置下,便有可能发生这种情况:

class VeryImportantException extends Exception {
public String toString() {
return "A very important exception!";
}
}

class HoHumException extends Exception {
public String toString() {
return "A trivial exception";
}
}

public class LostMessage {
void f() throws VeryImportantException {
throw new VeryImportantException();
}
void dispose() throws HoHumException {
throw new HoHumException();
}
public static void main(String[] args)
throws Exception {
LostMessage lm = new LostMessage();
try {
lm.f();
} finally {
lm.dispose();
}
}
}
第一个困惑着么有TRY没CATCH?..而是TRY和FINALLY组合在一起是社么意思?
第二个困惑 我的理解是第一个异常还没来得及离开该程序去执行异常处理而被FINNALLY强制执行了
一个方法,导致第2个异常产生而让JVM无法回到第一个异常抛出点来执行处理?
第三个困惑 是否可以加CATCH?
...全文
173 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
SimonDW 2005-03-31
  • 打赏
  • 举报
回复
finally 字句的作用跟catch不一样,它并不捕捉异常,而是保证不管有没有异常,都能执行
一些操作。这在处理需要资源的地方相当有用。

异常(Exception)丢失并不是因为finally 捕捉了,而是因为在finally字句里把引起异常的类
本身给释放了,所以相应的异常也就没有被处理。

对于public static void main(String[] args) 扔出的异常应该是由JVM截获,
只是没扔出来吧了。
OnlyFor_love 2005-03-31
  • 打赏
  • 举报
回复
楼上讲的非常仔细!
楼主应该能理解了吧!

我的见解和楼上一样!
catch本来就是用来捕捉异常的,不过要是你不知道到底会发生什么异常,那你可以让jvm去捕捉!
那么程序执行到那的时候,jvm就会抛出一个异常,然后执行你的finally中的语句
kingfish 2005-03-31
  • 打赏
  • 举报
回复
//THINK IN JAVA都把异常叫做违反例哦
翻译的问题

//你的意思是说TRY CATCH能被TRY FINNALLY替换?那么TRY FINANLLY和他有一样的作用?
我没说,你理解错。 要是能代替那要2个干吗, catch段异常时才执行

//那么谁来捕获这个异常呢?
JVM
lixiaoxue85 2005-03-30
  • 打赏
  • 举报
回复
THINK IN JAVA都把异常叫做违反例哦
你的意思是说TRY CATCH能被TRY FINNALLY替换?
那么TRY FINANLLY和他有一样的作用?
那么谁来捕获这个异常呢?
kingfish 2005-03-30
  • 打赏
  • 举报
回复
1. try/catch/finally
catch/finally可以只有1个,也可全有。
不管try段有无异常,finally都会执行。

2. 由于finally段又抛出新异常,导致最初的异常无法获得(即“丢失”)

3. 可以


另外,Exception通常翻译为“异常”,不是“违例”

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧