zoukankan      html  css  js  c++  java
  • 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);
            }
         }
  • 相关阅读:
    【杂谈】压行技巧(压代码)
    【UVA】11464 Even Parity(枚举子集)
    【POJ】2373 Dividing the Path(单调队列优化dp)
    【POJ】2329 Nearest number
    【BZOJ】1833: [ZJOI2010] count 数字计数(数位dp)
    【BZOJ】2809: [Apio2012]dispatching(左偏树)
    【BZOJ】2342: [Shoi2011]双倍回文(Manacher)
    【BZOJ】1912: [Apio2010]patrol 巡逻(树的直径)
    【BZOJ】1911: [Apio2010]特别行动队(斜率优化dp)
    【BZOJ】1913: [Apio2010]signaling 信号覆盖(计算几何+计数)
  • 原文地址:https://www.cnblogs.com/andgoo/p/2469061.html
Copyright © 2011-2022 走看看