下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

java中的缺点和丢失的违例实施方案

作者:课课家教育     来源: http://www.kokojia.com点击数:775发布时间: 2016-02-21 16:14:39

标签: java编程java违例java教程

大神带你学编程,欢迎选课

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

java中的缺点和丢失的违例实施方案_java编程_java违例_课课家

  //: 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生成的)。

赞(0)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程