JAVA为什么不能通过构造函数传参来设置数组长度。

时间:2023-03-09 00:35:23
JAVA为什么不能通过构造函数传参来设置数组长度。

 今天我们来说说 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 :

JAVA为什么不能通过构造函数传参来设置数组长度。

我们通过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);
}
}

初次写博客,有很多不足。希望能够对大家带来帮助。谢谢