我是使用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认为没关系,但出于某种原因,我无法运行此代码。
什么可能解决我的问题?
答案 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
的局部变量。只初始化了局部变量。