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


















上面是個簡單的方法,代碼中有個隱藏的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
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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