无法使用方法调用数组?

时间:2015-09-16 23:38:40

标签: java arrays class object nullpointerexception

我是使用DrJava和JDK 8.0编译器的Java初学者,我正在编写一个简单的代码,它创建一个类的数组并在另一个类上调用它的长度。我已经回顾了关于数组的许多线索,但我似乎无法找出为什么我的代码会破坏。

我编写了一个使用一个类的相同代码的版本。但是,当我尝试使用两个类运行它时,它会中断:

这是我的一流代码:

func(v: String, vd: String, data: Int) = {
  val clz1 = Class.forName(v)
  val clz2 = Class.forName(vd)
  // etc
}

当我运行它时,它可以工作:

public class SingleClass
{
  int array[];

  public SingleClass()
  {
    array = new int[5];
    System.out.println("Array Length: "+returnArrayLength());
  }

  public int returnArrayLength()
  {
    return array.length; 
  }

  public static void main(String arg[])
  {
  SingleClass one = new SingleClass();
  }
}

容易。

然后我的两级代码(我想要的那个)没有用。

以下是我的两个课程:

>run SingleClass
Array Length: 5

另一个:

public class Array
{
  int array[];

  public Array()
  {
    array = new int[5];
  }

  public int arrayLength()
  {
    return array.length;
  }
}

当我运行它时,我得到一个nullpointer错误:

public class Test
{
  Array testArray;

  public Test()
  {
    returnArrayLength();
  }

  public void returnArrayLength()
  {
    System.out.println("array length: "+testArray.arrayLength()); 
  }

  public static void main(String arg[])
  {
    Array testArray = new Array();
    new Test();
  }
}

我试图使结构完全相同,DrJava认为没关系,但出于某种原因,我无法运行此代码。

什么可能解决我的问题?

2 个答案:

答案 0 :(得分:3)

Array类中的testArray对象Test与您在main方法中创建的Array对象testArray不同。您的Array课程中的Test永远不会被初始化,这就是您获得该异常的原因。

您应该将主方法中的testArray传递到Test的构造函数中。

Array testArray = new Array();
new Test(testArray);

现在您应该将Test中的构造函数更改为以下内容:

public Test(Array array)
{
    testArray = array;
    returnArrayLength();
}

现在,您的Test类接受Array作为构造函数参数,并对其进行初始化,以便您可以在Test类中使用它。

答案 1 :(得分:0)

您同时拥有一个实例变量和一个名为testArray的局部变量。只初始化了局部变量。