2010-04-11 115 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