import java.util.*;public class TreeSetTest{
private Set<Integer> tset = new TreeSet<Integer>();
public TreeSetTest(){
tset = null;
}

public void insert(int num){
tset.add(num);
}

public void show(){
for(int n:tset)
System.out.print(n+" ");
}

public static void main(String...args){
TreeSetTest t = new TreeSetTest();
t.insert(5);
t.insert(4);
t.insert(9);
t.insert(6);
t.insert(1);
t.show();
}
}
运行结果为Exception in thread "main" java.lang.NullPointerException
        at TreeSetTest.insert(TreeSetTest.java:10)
        at TreeSetTest.main(TreeSetTest.java:20)
为什么会这样呢?

解决方案 »

  1.   

    public static void main(String...args)改为public static void main(String[] args)
      

  2.   

    import java.util.*;public class TreeSetTest {
    private Set<Integer> tset; public TreeSetTest() {
    tset = new TreeSet<Integer>();
    } public void insert(int num) {
    tset.add(num);
    } public void show() {
    for (int n : tset)
    System.out.print(n + " ");
    } public static void main(String... args) {
    TreeSetTest t = new TreeSetTest();
    t.insert(5);
    t.insert(4);
    t.insert(9);
    t.insert(6);
    t.insert(1);
    t.show();
    }
    }
      

  3.   


    import java.util.Set;
    import java.util.TreeSet;public class TreeSetTest {

    private Set<Integer> tset;
    public TreeSetTest() {
    tset = new TreeSet<Integer>();
    } public void insert(int num) {
    tset.add(num);
    } public void show() {
    for (int n : tset)
    System.out.print(n + " ");
    } public static void main(String... args) {
    TreeSetTest t = new TreeSetTest();
    t.insert(5);
    t.insert(4);
    t.insert(9);
    t.insert(6);
    t.insert(1);
    t.show();
    }
    }
      

  4.   

    public static void main(String...args) 
    这种用法第一次见~还请lz解释下
      

  5.   

    public TreeSetTest(){ 
    tset = null; //这句去掉
      

  6.   

    public TreeSetTest(){
    tset = null;
    }
    你把实例化过的对象又设为null,当然会报错
    public TreeSetTest(){
    }这样就行
      

  7.   


    实例化了不也是null么?我让test=null了,也没有引用怎么会报错呢?
      

  8.   


    //你在构造方法中给tset赋值为null,如然后在insert方法中用到了tset.add即为null.add当然报空指针错啦
      

  9.   

    这里是个类初始化顺序的问题:
    当一个类要被构造成一个对象的时候,即被new,加载其成员部分,依次为成员变量(即非静态变量)、非静态初始化块、非静态方法、最后才是构造器。
    所以,本来tset变量本来有值的,现在,你在构造方法中,要把它设置为空的
      

  10.   

    实例化跟null差远了,你先搞清楚基本概念吧,实例化了表示有一个对象在那里,虽然可能某些属性是0或者空,但是有个整体对象,null压根就没有对象
      

  11.   

    tset = null; 这句惹的祸