class Node
{
public int index;
}class other
{
public static void main(String [] args)
{
Node[] tree = new Node[10];
System.out.println(tree[1].index);
}
}提示空指针异常,真是羞愧难当啊。。
哪位帮着看看?在线等着
{
public int index;
}class other
{
public static void main(String [] args)
{
Node[] tree = new Node[10];
System.out.println(tree[1].index);
}
}提示空指针异常,真是羞愧难当啊。。
哪位帮着看看?在线等着
java不同,声明类的类型变量,
还得创建对象,申请内存空间,
这一点和C++不同.
一定要new一下!
{
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);
}
}
其实是分了十个引用空间,就是C里的指针,十个指针,但没有指向任何地方。
你必须使用tree[1] = new 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);
}
}
{
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;
{
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(); 呢?
困惑中……
只是声明并初始化了tree是一个数组,但并没有具体为tree数组中的成员对象赋初值,因此java自动讲每一个对象设置为null,故而发生前面的空指针异常。
但如果你在Node类中用static,将发生什么事情呢?在对象没有建立之前,只要类被装载,Node类中int型index的值就被赋为0,所以后面得到的index结果是0。另外,你用tree[1].index和用Node.index效果一样
系统就会为tree分配十个index的类型的空间呢?