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);
        }
     }
原文地址:https://www.cnblogs.com/andgoo/p/2469061.html