Practical Java笔记四:绝对不可轻忽异常

当Java程序产生异常,你能做些什么呢?
1.捕捉并处理它,防止它进一步传播(propagate)。
2.捕捉并再次抛出它,这么一来它会被传播给调用端。
3.捕捉它,然后抛出一个新异常给调用端。
4.不捕捉这个异常,听任它传播给调用端。

如果你在开发初期不知道如何应付异常,至少要像下面这样做:

复制代码
public void m1(){
     //...
     try{
     
     }catch(FileNotFoundException fnfe){
         System.out.println(fnfe+"caught in method m1");
         LogException(fnfe);
     }
  
  }
复制代码

  

     这种做法至少提供了一些输出,以及一份日志文件(logfile),用来记
录程序曾经发生过异常,也让你知道程序存在一些问题。这种技术也可以
用来提醒你,异常已经出现而且暂时没有适当的回复机制。日后你可以依
据日志文件内的记录找到相应代码,插入合适的异常处理句。注意,你必
须提供LogException(),它只需将异常信息写入文件就行了。

    这种做法的缺点是:日志文件仅仅包括测试时发生的异常,无法记录未发
生的异常。所以当某次测试过后,即使对日志文件的所有内容都处理完毕,
也并不就意味你已经完全清理好了你的程序。日志文件仅仅只用来显示你
在测试过程中获得的异常而已。
    如果想要发现测试过程中未曾发生的异常,则必须查找整个程序源码,
LodException()或其他作为注释的标记(tag)。这是确保你不需要使用简
陋的println()语句的惟一办法;那个语句所在之处应该代之一适当的异
常处理代码。


另一个有效做法是使用printStaticTrace( )。这个函数提供被抛异常的
消息,以及该异常的起源(以stack trace方式呈现),并将它们输出到
标准错误串流(standarderrorstream。译注:通常是屏幕)。以此做法
修改代码,获得的结果是:

 

复制代码
 public void m1(){
        //...
        try{
          
        }catch(FileNotFoundException fnfe){
           System.out.println(fnfe+"caught in method m1");
           fnfe.printStackTrace(System.err);
        }
     }
复制代码
posted @   吴超文  阅读(212)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示