憨厚生

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            165 隨筆 :: 17 文章 :: 90 評(píng)論 :: 0 Trackbacks

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

           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");
            }

           }


           上面是個(gè)簡(jiǎn)單的方法,代碼中有個(gè)隱藏的bug。我在維護(hù)一個(gè)系統(tǒng)的時(shí)候就遇到類似的代碼,實(shí)際中類似的BUG隱藏
          的更深!在對(duì)系統(tǒng)業(yè)務(wù)和代碼不是很很熟悉的情況下,我推薦如下寫法:

           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   //如果異常發(fā)生的話,content可能為空
          11   //下面對(duì)content的操作就有可能發(fā)生NullPointerException異常
          12   System.out.println(e.getMessage());
          13  }

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

          20 }


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


            希望對(duì)大家有幫助!

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

          posted on 2009-12-09 16:59 二胡 閱讀(401) 評(píng)論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 高台县| 泽州县| 和林格尔县| 广灵县| 渝北区| 凉山| 鹤峰县| 永嘉县| 东至县| 灵山县| 台东市| 彰化市| 石家庄市| 沈丘县| 昌乐县| 含山县| 富裕县| 隆德县| 天全县| 明溪县| 侯马市| 榕江县| 磐安县| 元谋县| 呼玛县| 名山县| 关岭| 蕉岭县| 湟源县| 通许县| 淳化县| 潞城市| 怀化市| 乐都县| 凉城县| 延吉市| 隆安县| 天全县| 平远县| 富阳市| 温州市|