Java教科书:“编译时必须知道数组的大小”

时间:2013-11-26 03:29:36

标签: java arrays runtime compile-time

我只是浏览了一本旧教科书,发现这篇文章用Java定义数组:

  

一维数组是由结构化复合数据类型组成的   一个有限的,固定的有序齐次元素集合   哪个有直接访问权限。有限表明有最后一个   元件。固定大小意味着必须知道数组的大小   编译时,但并不意味着数组中的所有插槽   必须包含有意义的价值观。

我对数组有基本的了解,并且我很乐意在每天的任务中使用它们,但是我很困惑,在编译时必须知道数组必须的大小。

一个非常简单的Java程序演示了可以在运行时使用可变大小实例化数组:

import java.util.Scanner;

public class test
{
   public static void main(String[] args)
   {
      Scanner scan = new Scanner(System.in);
      System.out.print("Enter a number: ");
      int size = scan.nextInt();
      int[] array = new int[size];
      System.out.println("You just create an array of size " + array.length);
   }
}

这会编译,执行并到达结尾而不会出错。

是什么给出了?

2 个答案:

答案 0 :(得分:3)

这是一个措辞很差的段落,但如果你松散地解释它,那是正确的。

在您的示例中,在编译时已知数组的大小。大小为size

你用“静态”或“常量”来解释“在编译时已知”,这是可以理解的。当然,正如我们所知,JVM根据size的值动态分配内存。

作者可能试图区分数组和类似ArrayList之类的内容,其中不必在初始化时指定维度。

答案 1 :(得分:0)

这里的数组大小是“大小”。编译器并不关心“大小”中可能存在的内容。内存在编译期间未分配,在运行时分配。在编译期间,不直接检查变量以获取它们的值。它只在运行时才能看到编译器看到“size”中存在的内容并分配内存。