2013-11-26 42 views
6

我只是通过我的旧课本中的一个撇“的阵列的尺寸必须在编译时已知的”,发现这个通道限定在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); 
    } 
} 

这将编译,执行,并到达没有错误的端部。

什么给?

+0

你能发表关于这个特定教科书(链接,作者,名字)的额外信息吗? –

+0

我必须说作者在这里给出了非常不准确的定义。 OP有一个非常有效的批评。我只想说作者是错的,或者他的措辞没有正确表达他的想法。当我们说在编译时已知数组大小时,我们正在讨论类似(较旧)的C/C++ –

+0

这本书是Dale,Joyce和Weems使用Java的面向对象数据结构(第1版)。本段在第90页。 – CptSupermrkt

回答

3

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

在你的例子中,编译时已知的数组的大小是。大小为size

您正在使用“static”或“constant”解释“编译时已知”,这是可以理解的。当然,正如我们知道的那样,JVM根据size的值动态分配内存。

作者可能试图区分一个数组和诸如ArrayList之类的东西,其中尺寸不需要在初始化时指定。

0

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