class Node
{
public int index;
}class other
{
public static void main(String [] args)
{
Node[] tree = new Node[10];
System.out.println(tree[1].index);
}
}提示空指针异常,真是羞愧难当啊。。
哪位帮着看看?在线等着

解决方案 »

  1.   

    java中是不能操作空指针的,你要给tree[1]指定一个值才行
      

  2.   

    Node类里的index会自动赋初值0的吧
      

  3.   

    Node[] tree = new Node[10];tree[1] = new Node();   //这句话是必须的System.out.println(tree[1].index);
      

  4.   

    哈哈,楼主,可能是学C++的吧.
    java不同,声明类的类型变量,
    还得创建对象,申请内存空间,
    这一点和C++不同.
        一定要new一下!
      

  5.   

    class Node
    {
    public int index;
    }class other
    {
    public static void main(String [] args)
    {
    Node[] tree = new Node[10];//注意这一句只是建立了含有10个引用的数组,
                                                 //但没有为引用建立对象。就像只声明Node tree
                                                 //而没有tree=new Node()
    System.out.println(tree[1].index);
    }
    }
      

  6.   

    楼主认为Node[] tree = new Node[10];就分配了十个对象空间是吧
    其实是分了十个引用空间,就是C里的指针,十个指针,但没有指向任何地方。
    你必须使用tree[1] = new Node();   为单个的指针分配实际指向的内存空间,
    是吧,呵呵
      

  7.   

    class Node
    {
    public int index;
    }class other
    {
    public static void main(String [] args)
    {
                      /*下面只是建立了一个数组,但是数组里面并没有放东西(可以把tree看成C里面的二级指针,这个数组实际上就是一个指针数组,每一个元素是一个指向Node类型对象的指针)*/
    Node[] tree = new Node[10];
                      /*通常要用下面的方式为数组中的每一个句柄(可以看成是C里面的指针)构造一个对象(相当于指针指向一个具体的地址空间)*/
                      for(int i = 0; i < tree.length; i++)
                      {
                           tree[i] = new Node();
                      }
    System.out.println(tree[1].index);
    }
    }
      

  8.   

    Node类里的index会自动赋初值0的吧并不是这样的,它只是自动赋值为null,就是指向空对象。所以你必须将它指向一个用new创建的Node对象。记住类数组都要自己添加对象的。
      

  9.   

    class Node
    {
      public static int index;
     }
     class other
     {
        public static void main(String[]args)
        {
        Node[]tree=new Node[10];
        System.out.println(tree[1].index);
        }
        }
    这样也可以!用static 静态先初始化index=0;
      

  10.   

    class Node
    {
      public static int index;
     }
     class other
     {
        public static void main(String[]args)
        {
        Node[]tree=new Node[10];
        System.out.println(tree[1].index);
        }
        }
    这样也可以!用static 静态先初始化index=0;
    ----------------------------------------------
    为什么用static就可以不用tree[1] = new Node(); 呢?
    困惑中……
      

  11.   

    请看你的Node[] tree=new Node[10];
    只是声明并初始化了tree是一个数组,但并没有具体为tree数组中的成员对象赋初值,因此java自动讲每一个对象设置为null,故而发生前面的空指针异常。
    但如果你在Node类中用static,将发生什么事情呢?在对象没有建立之前,只要类被装载,Node类中int型index的值就被赋为0,所以后面得到的index结果是0。另外,你用tree[1].index和用Node.index效果一样
      

  12.   

    如果把index声明为static变量,那么请问是否只要声明并初始化了tree是一个数组,
    系统就会为tree分配十个index的类型的空间呢?
      

  13.   

    静态初始并未分配十个空间,如果是static index的话,你甚至可以这样引用:Node.index这个是类变量,并非应用对象的属性,即便你用tree[1].index引用的还是共享的类变量
      

  14.   

    这个类变量永远只有一个,即使你申请多个Node对象,