缺点:丢失的违例

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

//: LostMessage.java
// How an exception can be lost

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();
    }
  }
} ///:~

输出如下:
 

A trivial exception
        at LostMessage.dispose(LostMessage.java:21)
        at LostMessage.main(LostMessage.java:29)

可以看到,这里不存在VeryImportantException(非常重要的违例)的迹象,它只是简单地被finally从句中的HoHumException代替了。
这是一项相当严重的缺陷,因为它意味着一个违例可能完全丢失。而且就象前例演示的那样,这种丢失显得非常“自然”,很难被人查出蛛丝马迹。而与此相反,C++里如果第二个违例在第一个违例得到控制前产生,就会被当作一个严重的编程错误处理。或许Java以后的版本会纠正这个问题(上述结果是用Java 1.1生成的)。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索exception
, dispose
, public
, finally
一个
,以便于您获取更多的相关知识。

时间: 2024-09-13 06:09:08

缺点:丢失的违例的相关文章

java集合的缺点:类型未知

使用Java集合的"缺点"是在将对象置入一个集合时丢失了类型信息.之所以会发生这种情况,是由于当初编写集合时,那个集合的程序员根本不知道用户到底想把什么类型置入集合.若指示某个集合只允许特定的类型,会妨碍它成为一个"常规用途"的工具,为用户带来麻烦.为解决这个问题,集合实际容纳的是类型为Object的一些对象的句柄.这种类型当然代表Java中的所有对象,因为它是所有类的根.当然,也要注意这并不包括基本数据类型,因为它们并不是从"任何东西"继承来的

Java字符丢失与中文编码

编码|中文 1. 引言在用JAVA进行开发时,偶尔在IO操作中会产生字符丢失现象.如在用BEA的WORKSHOP开发CMP EJB过程中,总是编译不通过,报错: cannot resolve symbol symbol : class Excetion location: class eaitest.vip.firmorder.FirmOrderBean_g8ghds__WebLogic_CMP_RDBMS } catch (Excetion ex) { 可以看到明显"Excetion"

找回丢失的QQ/UC好友

一不小心中了个木马,QQ和UC都被盗了.好不容易通过申述拿回来,刚舒了一口气,却发现--好友一洗如空!对于IM软件来说,好友资源无疑是最大的财富,然而遇到无良的窃贼,如何最大程度地挽回损失呢? QQ:时光回流,找回好友 QQ有一套专门的好友恢复系统.使用浏览器打开"http://huifu.qq.com/",这是一个简洁的窗口,只需填入QQ号码.密码和验证字符,然后登录.(图1) 图1 系统提供了一个月内的删除恢复,可以根据情况选择恢复"四周内"."两周内

重新“掷”出违例

在某些情况下,我们想重新掷出刚才产生过的违例,特别是在用Exception捕获所有可能的违例时.由于我们已拥有当前违例的句柄,所以只需简单地重新掷出那个句柄即可.下面是一个例子: catch(Exception e) { System.out.println("一个违例已经产生"); throw e; } 重新"掷"出一个违例导致违例进入更高一级环境的违例控制器中.用于同一个try块的任何更进一步的catch从句仍然会被忽略.此外,与违例对象有关的所有东西都会得到保

Go语言的9大优势和3大缺点

转用一门新语言通常是一项大决策,尤其是当你的团队成员中只有一个使用过它时.今年 Stream 团队的主要编程语言从 Python 转向了 Go.本文解释了其背后的九大原因以及如何做好这一转换. Go的优势 原因 1:性能 Go 极其地快.其性能与 Java 或 C++相似.在我们的使用中,Go 一般比 Python 要快 30 倍.以下是 Go 与 Java 之间的基准比较: 原因 2:语言性能很重要 对很多应用来说,编程语言只是简单充当了其与数据集之间的胶水.语言本身的性能常常无关轻重. 但是

ASP.NET状态服务及session丢失问题解决方案总结

原文:ASP.NET状态服务及session丢失问题解决方案总结[转载]asp.net Session的实现: asp.net的Session是基于HttpModule技术做的,HttpModule可以在请求被处理之前,对请求进行状态控制,由于Session本身就是用来做状态维护的,因此用HttpModule做Session是再合适不过了. ASP.NET中Session的状态保持方式 ASP.NET提供了Session对象,从而允许程序员识别.存储和处理同一个浏览器对象对服务器上某个特定网络应

用户登录状态用什么保存好?(Session丢失)

问题描述 我开始用Session保存用户登录状态,放中电云集的虚拟机里.老丢失Session(5分钟以内,快等1分钟就丢了),然后询问过和测试过后,发现他们也没有开启"ASP.NET状态服务",所以修改<SessionStatemode="StateServer".....>是用不了的.然后我只好改Cookies保存用户数据,请问下我这个问题有什么其他好的解决方法吗?谢谢谢谢啊!! 解决方案 解决方案二:放到cookie里面也行的解决方案三:cookie

《IP多播网络的设计与部署(第1卷)》——1.3 IP多播的缺点

1.3 IP多播的缺点 IP多播网络的设计与部署(第1卷) 1.3 IP多播的缺点 尽管在网络中使用IP多播有许多很好的理由,但是需要记住,该技术也存在缺陷和不利的方面.读者需要清楚地理解IP多播的这些缺陷,尤其是在开发计划使用IP多播的新应用时,更要考虑这些缺陷. 与IP多播系统的实施相关的某些主要缺陷包括不可靠的包交付.包复制和网络拥塞. 1.3.1 不可靠的信息包交付 IP多播和IP单播一样,都是天生不可靠的.只有在第4层使用TCP(或其他更高层协议),IP单播数据流才能成为可靠的.然而,

Foxmail收件箱无法打开和文件丢失的解决办法

Foxmail使用当中经常出现的问题之一是in.box/out.box无法打开,或者in.ind/out.ind索引文件丢失.这时候应该认真找出导致问题的原因,对症下药. 一.常见的情况之一是你的某封邮件当中含有病毒,由于foxmail将整个邮件夹当做一个文件来保存,所以你含有该病毒邮件的整个邮件夹都被杀毒软件当做病毒文件处理了(尤其是Norton,出过很多次状况了). 这种情况下杀毒软件通常会对该文件做两种处理:隔离或者删除.按照现在杀毒软件通常的做法,无论是隔离还是删除,杀毒软件要么将该文件