今天我们来说说 JAVA通过构造函数传递的参数来设置数组长度的问题。
问题在于我们没有明确知晓JVM的运行顺序。在new对象的时候,先调用构造函数,但是并没有将执行构造函数的代码,随机之后就初始化了数组长度为0了;
错误代码如下:
class Test {
int length;
public Test(int a)
{
this.length=a;
}
int[] a=new int[length];
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt(); Test t1=new Test(10);
System.out.println(t1.length);
System.out.println(t1.a.length);
}
输出结果:
输入:10
输出 :10 //length的值
输出 :0 //数组的长度
为什么数组的长度还是0?
debug :
我们通过debug可以看到我们JVM是先调用了构造函数,但是并没有执行当中的语句,然后把类中的成员变量初始化了 。这时候的length并没有被构造函数的形参赋值。所以数组长度为0,
所有初始化完毕之后,才将数组的形参赋值给length。
修改:
我们可以先定义数组,然后new数组的代码写在构造函数中的内部了。这样的话,数组就不会被初始化了。 代码如下:
class Test {
int[] a ; public Test(int lenght)
{
a = new int[lenght] }
7
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt(); Test t1=new Test(10);
System.out.println(t1.length);
System.out.println(t1.a.length);
}
}
初次写博客,有很多不足。希望能够对大家带来帮助。谢谢