JAVA为什么不能通过构造函数传参来设置数组长度。
今天我们来说说 JAVA通过构造函数传递的参数来设置数组长度的问题。
问题在于我们没有明确知晓JVM的运行顺序。在new对象的时候,先调用构造函数,但是并没有将执行构造函数的代码,随机之后就初始化了数组长度为0了;
错误代码如下:
1 class Test { 2 int length; 3 public Test(int a) 4 { 5 this.length=a; 6 } 7 int[] a=new int[length]; 8 public static void main(String[] args) { 9 Scanner in=new Scanner(System.in); 10 int n=in.nextInt(); 11 12 Test t1=new Test(10); 13 System.out.println(t1.length); 14 System.out.println(t1.a.length); 15 }
输出结果:
输入:10 输出 :10 //length的值 输出 :0 //数组的长度
为什么数组的长度还是0?
debug :

我们通过debug可以看到我们JVM是先调用了构造函数,但是并没有执行当中的语句,然后把类中的成员变量初始化了 。这时候的length并没有被构造函数的形参赋值。所以数组长度为0,
所有初始化完毕之后,才将数组的形参赋值给length。
修改:
我们可以先定义数组,然后new数组的代码写在构造函数中的内部了。这样的话,数组就不会被初始化了。 代码如下:
1 class Test { 2 int[] a ; 3 public Test(int lenght) 4 { 5 a = new int[lenght] 6 }
7 8 public static void main(String[] args) { 9 Scanner in=new Scanner(System.in); 10 int n=in.nextInt(); 11 12 Test t1=new Test(10); 13 System.out.println(t1.length); 14 System.out.println(t1.a.length); 15 } 16 }
初次写博客,有很多不足。希望能够对大家带来帮助。谢谢

浙公网安备 33010602011771号