Java中对象数组的使用

时间:2023-01-02 10:32:15

今天在用Java实现链表时,用到了对象数组,在运行程序时,程序抛出异常:java.lang.NullPointerException。如下的代码:

public class StaticLinkList {
 
 public static class LNode {
  public Object data;
  public int cursor;
  public LNode(){
  }
 }//静态内部类, 不产生外部类对象的引用
 
 private LNode[] LinkList = null;
 private int head;//头结点索引
 
 //创建备用链表(数组), 结点数为size, linklist[0].cursor为头指针
 //同时创建链表, 分配头结点, 初始化头结点指针
 public StaticLinkList(int size){
  LinkList = new LNode[size];
  
  for(int i = 0; i < size; i++)
   LinkList[i].cursor = i + 1;  //这一行的代码导致异常抛出
  

  LinkList[size - 1].cursor = 0;
  head = Malloc();
  LinkList[head].cursor = 0;
 }

 

    开始以为是内部类的问题,经查阅资料,发现原来是对象数组的问题。代码LinkList = new LNode[size];仅仅是分配了保存对象引用的数组空间,但是并没有为要引用的对象分配空间;而代码LinkList[i].cursor = i + 1; 却引用了对象数组元素引用的对象,由于没有创建数组元素引用的对象,因此数组元素都为null,从而导致抛出异常:java.lang.NullPointerException。

将代码修改为如下,问题得以解决:

 public StaticLinkList(int size){
  LinkList = new LNode[size];
  
  for(int i = 0; i < size; i++){
   LinkList[i] = new LNode();
   LinkList[i].cursor = i + 1;
  }

  LinkList[size - 1].cursor = 0;
  head = Malloc();
  LinkList[head].cursor = 0;
 }

    Java的对象数组和C的指针数组有类似的特性。