`

陷阱:异常丢失

F# 
阅读更多
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) {
    try {
      LostMessage lm = new LostMessage();
      try {
        lm.f();
      } finally {
        lm.dispose();
      }
    } catch(Exception e) {
      System.out.println(e);
    }
  }
} 

/* 输出结果:
A trivial exception
*/

 

从输出结果可以发现,VeryImportantException丢失了,它被finally子句中的HoHumException所取代。这个相当严重的缺陷,因为异常可能会以一种比这个例子更微妙和难以察觉的方式完全丢失,从而导致一些怪bug现象。

 

 

还有一种更简单的丢失异常的方式就是直接从finally子句中返回:

 

public class ExceptionSilencer {
  public static void main(String[] args) {
    try {
      throw new RuntimeException();
    } finally {
      // Using 'return' inside the finally block
      // will silence any thrown exception.
      return;
    }
  }
} 
 
分享到:
评论
1 楼 squall140 2009-09-16  

如果捕获了这个异常的话就没问题

             try {   
	        lm.f();   
	      } catch(Exception e){
	    	  e.printStackTrace();
	      } finally{
	    	  lm.dispose();
	      }

相关推荐

    C++程序设计陷阱 .

    隐式转换虽然方便,但也可能导致意料之外的行为,如窄化转换(narrowing conversion)可能导致数据丢失。例如,将大整型(long long)赋值给整型(int)时,超出范围的部分会被截断。因此,开发者应谨慎使用隐式转换...

    1222-张国旗-JAVA陷阱.rar

    在Java编程语言中,开发者经常会遇到一些不那么明显的陷阱,这些陷阱可能会导致程序运行异常、性能下降或难以调试的问题。"1222-张国旗-JAVA陷阱.rar"这个压缩包文件显然是一份由专家张国旗编写的关于Java编程中常见...

    Java基础方面陷阱.

    综上所述,Java基础方面的陷阱涵盖了语法理解、数据类型使用、运算符和流程控制的误用、异常处理的不当、内存管理的误区,以及面向对象设计原则的应用等多个方面。通过深入学习和实践,可以有效地避免这些陷阱,提升...

    行业分类-设备装置-用于并行处理单元的陷阱处理器架构.zip

    9. **安全性和可靠性**:陷阱处理器在系统安全性和可靠性方面起着重要作用,因为它能够快速响应并处理可能导致系统崩溃或数据丢失的事件。 10. **实时响应**:对于实时系统,陷阱处理器必须具备快速响应中断的能力...

    c语言编程中常见的陷阱和漏洞

    这些陷阱往往源于语言本身的特性,而漏洞则可能导致程序运行错误、安全问题甚至数据丢失。本篇文章将深入探讨一些常见的C语言陷阱和漏洞,并提供避免它们的策略。 1. **类型转换陷阱**:C语言对类型转换的处理比较...

    C++程序设计陷阱

    4. **类型转换**:C++支持多种类型的隐式和显式类型转换,但不恰当的类型转换可能导致数据丢失或运行时错误。了解`static_cast`、`dynamic_cast`、`reinterpret_cast`和`const_cast`的使用场景和限制至关重要。 5. ...

    C陷阱与缺陷-答案-练习答案

    1. **类型转换陷阱**:C语言中的类型转换可能导致数据丢失或意外行为。例如,将大整型赋值给小整型时可能丢失高位信息,浮点数和整数之间的转换可能导致精度问题。理解各种类型间的隐式和显式转换规则至关重要。 2....

    第课防范网络陷阱与计算机病毒2优秀文档.ppt

    3. **备份重要数据**:避免因病毒感染导致数据丢失,定期备份关键文件至安全地方。 4. **审慎处理网络信息**:对于中奖信息、有奖调查等,保持警惕,不轻易相信,以免被骗取钱财或个人信息。 5. **谨慎约见网友**...

    snmp trag预定义的7个陷阱

    EgpneighborLoss陷阱表明一个外部网关协议(EGP)邻居关系丢失。EGP是一种早期的路由协议,虽然现在已经被BGP取代,但在某些特定环境中仍然会被使用。当一个EGP邻居突然不可达时,代理会发送EgpneighborLoss陷阱。这...

    躲过木马链接 却掉进App借款陷阱.pdf

    她在网购后迟迟未收到商品,于是联系网上留下的快递员电话,却接到了自称快递公司客服的陌生来电,告知其包裹丢失并承诺双倍赔偿。骗子通过获取受害者的购物信息来取得信任,然后引导陈女士扫描二维码,进入所谓的...

    避坑手册 - JAVA编码中容易踩坑的十大陷阱.doc

    在使用对象前,应检查其是否为null,以防止意外的空指针异常。 5. equals()与==的区别: `equals()`用于比较对象的内容,而`==`则比较对象的引用。对于基本类型,`==`是比较值。对于对象,除非它们指向内存中的...

    C语言陷阱和缺陷与读书笔记word档

    忽视错误检查可能导致程序在遇到问题时崩溃或运行异常。良好的编程习惯应包括对函数返回值的检查,并适当地处理错误。 七、位运算 C语言提供了丰富的位运算符,如按位与、按位或、按位异或和位移。这些运算符在底层...

    ruby-pitfalls:编写 ruby​​ 代码时的语言陷阱列表

    调用超级方法可能会丢失信息 如果子类定义了一个与基类名称相同但签名不同的方法(参数较少),则调用“super”来调用基类的方法将不会传递缺少参数的信息。 {} 和 do..end 不等价 花括号 {} 比 do..end

    c_traps_and_pitfalls.zip

    《C语言陷阱与误区》是C语言编程领域中一本经典的参考书籍,主要针对C语言初学者和有一定经验的程序员,揭示了C语言编程过程中容易遇到的陷阱和常见错误,帮助读者避免这些潜在的问题,提高代码质量和可靠性。...

    Linux原理与应用——专题3:中断与系统调用.ppt

    5. 故障和陷阱:故障(fault)是由于硬件条件不满足导致的异常,如页面错误。陷阱(trap)则是在执行特殊指令(如系统调用)时发生的,使得控制权从用户空间转移到内核空间。 系统调用是操作系统提供给用户程序访问...

    Java.Bug模式详解pdf

    5. **IO流操作错误**:Java的IO流系统广泛而复杂,不正确的流关闭、缓冲区使用、字符编码选择等问题可能导致数据丢失或读写异常。 6. **反射和动态代理的滥用**:反射和动态代理虽然强大,但也可能导致安全风险和...

    安全教育常识——网络安全.doc.pdf

    4. 避免情感陷阱:对网上示爱的人保持理性,不轻易陷入情感纠葛。 三、密码安全常识: 1. 设置复杂密码:密码应足够长,包含大小写字母、数字和特殊符号,增加破解难度。 2. 避免使用个人信息:不要用生日、电话...

    nt file system

    任何可能导致数据丢失或损坏的错误都必须被彻底根除。在开发过程中,需要进行严格的数据完整性和安全性测试。 2. **预防系统崩溃**:内核驱动程序应设计成即使面对硬件故障也能优雅地处理错误而不导致整个系统崩溃...

    深入理解linux内核(3)-part4

    在Linux内核中,异常通常分为两类:陷阱(trap)和故障(fault)。陷阱通常是预期的,如系统调用,而故障通常是未预期的,如页面错误。当发生异常时,内核会捕获异常,尝试修复问题或终止错误进程。 在"第4章.中断...

Global site tag (gtag.js) - Google Analytics