Java:初始化问题,无法从arrayList打印“赋值”值

时间:2010-04-11 01:48:48

标签: java initialization arraylist

$ 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 个答案:

答案 0 :(得分:7)

当你试图调用appendMe.add()时会抛出NullPointerException,因为你明确地将它设置为null,所以执行是直接跳转到catch块而第二个是循环isn'甚至跑步。但是,您会静默捕获所有异常,因此不会显示错误。你可能不应该在那里进行全局尝试/捕获;至少,在catch块中添加e.printStackTrace();,这样就不会无声地忽略异常

答案 1 :(得分:5)

首先,您将代码封装在try/catch区块中,但您吞噬异常,这是一种非常糟糕的做法。不要这样做,这实际上是你在这里没有得到任何有用信息的原因。因此,要么记录例外情况,要么在e.printStackTrace块中打印catch,要么只删除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);
        }
    }
}

答案 2 :(得分:4)

您需要初始化appendMe。

appendMe = new ArrayList<String>();

答案 3 :(得分:3)

使用空catch块编写代码是非常糟糕的做法。不要养成这样做的习惯。虽然suihock捕获了问题的根本原因,但如果你在catch块中打印了异常:

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

...你会立即找到问题的原因。