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 }

 

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

 

posted @ 2020-03-25 12:24  Arleny  阅读(633)  评论(0)    收藏  举报