憨厚生

          ----Java's Slave----
          ***Java's Host***

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            165 隨筆 :: 17 文章 :: 90 評論 :: 0 Trackbacks

            這樣的錯誤以前我也犯過,也見過不少人這樣的寫法!下面我也舉個例子:
            

           public void writeFile(File f) {
            String content 
          = null;
            
          try {
             
          byte[] b = new byte[1024];
             FileInputStream in 
          = new FileInputStream(f);
             in.read(b);
             content 
          = new String(b);
            }
           catch (Exception e) {
             System.out.println(e.getMessage());
            }


            
          if (content.indexOf("hello"> -1{
             System.out.println(
          "yes");
            }
           else {
             System.out.println(
          "no");
            }

           }


           上面是個簡單的方法,代碼中有個隱藏的bug。我在維護一個系統的時候就遇到類似的代碼,實際中類似的BUG隱藏
          的更深!在對系統業務和代碼不是很很熟悉的情況下,我推薦如下寫法:

           1 public void writeFile(File f) {
           2  String content = null;
           3  try {
           4   byte[] b = new byte[1024];
           5   FileInputStream in = new FileInputStream(f);
           6   in.read(b);
           7   content = new String(b);
           8  }
           catch (Exception e) {
           9   content="";
          10   //如果異常發生的話,content可能為空
          11   //下面對content的操作就有可能發生NullPointerException異常
          12   System.out.println(e.getMessage());
          13  }

          14  //下面操作有可能發生NullPointerException異常
          15  if (content.indexOf("hello"> -1{
          16   System.out.println("yes");
          17  }
           else {
          18   System.out.println("no");
          19  }

          20 }


           一般來說異常處理不推薦直接system.out.println打印出來!
           幾條建議:
           如果無法處理某個異常,那就不要捕獲它。
            ☆ 如果捕獲了一個異常,請不要胡亂處理它。
            ☆ 盡量在靠近異常被拋出的地方捕獲異常。
            ☆ 在捕獲異常的地方將它記錄到日志中,除非您打算將它重新拋出。
            ☆ 按照您的異常處理必須多精細來構造您的方法。
            ☆ 需要用幾種類型的異常就用幾種,尤其是對于應用程序異常。
            ☆ 把低層次的異常封裝成層次較高程序員較容易理解的異常。
            ☆ 盡量輸出造成異常的完整數據
            ☆ 盡量捕獲具有特定含義的異常:比如SqlException,而不是簡單地捕獲一個Exception


            希望對大家有幫助!

          參考:
          http://www.aygfsteel.com/usherlight/archive/2006/10/23/76782.html

          posted on 2009-12-09 16:59 二胡 閱讀(396) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 奇台县| 凤山县| 眉山市| 磐安县| 吐鲁番市| 海兴县| 太仆寺旗| 宜州市| 资源县| 宜城市| 松阳县| 荆州市| 西丰县| 平罗县| 聊城市| 夏津县| 五家渠市| 潮州市| 涿鹿县| 泸西县| 鞍山市| 镇康县| 阿合奇县| 东阿县| 吴川市| 安新县| 丰城市| 兴业县| 罗城| 承德市| 阜新市| 龙井市| 神农架林区| 德安县| 万年县| 霞浦县| 泰来县| 依安县| 沙田区| 新和县| 都匀市|