2010-04-11 76 views
0
$ javac ArrayListTest.java 
$ java ArrayListTest 
$ cat ArrayListTest.java 
import java.io.*; 
import java.util.*; 

public class ArrayListTest{ 

    public static void main(String[] args) { 
     try { 
      String hello ="oeoaseu oeu hsoae sthoaust hoaeut hoasntu"; 
      ArrayList<String> appendMe = null; 

      for(String s : hello.split(" ")) 
       appendMe.add(s+" "); 

      for(String s : appendMe) 
       System.out.println(s); 
      //WHY DOES IT NOT PRINT? 
     }catch(Exception e){ 
     } 
    } 
} 

回答

4

您需要初始化appendMe。

appendMe = new ArrayList<String>(); 
7

當您嘗試調用appendMe.add()一個NullPointerException被拋出,因爲你明確地將其設置爲null,所以執行直接跳轉到catch塊和第二個for循環甚至沒有運行。但是,您無聲地捕獲所有異常,因此不會顯示錯誤。你應該沒有那個全球性的嘗試/抓住那裏;至少,在catch塊中添加一個e.printStackTrace();,這樣異常不會被默默忽略

+0

+1 - 沒有空的try catch塊 - 比剛開始從事「扔」的習慣,像e.printStackTrace()從長遠來看,更多的悲傷。 – 2010-04-11 03:35:03

3

用空catch塊編寫代碼是非常糟糕的做法。不要養成這樣做的習慣。雖然suihock捕獲你的問題的根本原因,如果你印了異常的catch塊:

} catch (Exception e) { 
    System.out.println("Got an exception: " + e.getMessage()); 
} 

...你會立刻發現你的問題的原因。

5

首先,你是封閉你的代碼在try/catch塊,但你吞嚥異常這是一個非常糟糕實踐。不要這樣做,這就是爲什麼你在這裏沒有得到任何有用的信息的原因。因此,要麼登錄異常或打印e.printStackTracecatch塊或只是刪除try/catch,沒有任何檢查Exception趕上。其次,你應該編程接口,而不是具體的類(這樣,你可以在不修改整個代碼的情況下更改具體的實現)。所以,相反的:

ArrayList<String> appendMe; 

聲明:

List<String> appendMe; 

第三,你需要初始化appendMe地方(這實際上是故障的根本原因,後來導致NullPointerException)宣佈時,例如它:

List<String> appendMe = new ArrayList<String>(); 

最後,我建議在循環中使用括號,即使只有一行。

總結:

import java.io.*; 
import java.util.*; 

public class ArrayListTest{ 

    public static void main(String[] args) { 
     String hello ="oeoaseu oeu hsoae sthoaust hoaeut hoasntu"; 
     List<String> appendMe = new ArrayList<String>(); 

     for(String s : hello.split(" ")) { 
      appendMe.add(s+" "); 
     } 

     for(String s : appendMe) { 
      System.out.println(s); 
     } 
    } 
} 
+0

無法理解界面。你的意思是使用列表更好,因爲它更一般,因此以後可以更容易地適應變化? – hhh 2010-04-11 03:10:20

+0

@HH有點。代碼的好處可能不明顯,但是這個頁面應該讓事情變得更清晰http://mindprod.com/jgloss/interface.html#MAINTENANCE。 – 2010-04-11 03:27:28