2013-11-26 233 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

這裏的數組大小是「大小」。編譯器不會對「大小」中可能存在的內容感到困擾。內存在編譯期間不分配,在運行時分配。在編譯期間,變量不會直接檢查以獲取它們的值。它只有在運行時,編譯器才能看到「大小」中存在的內容並分配內存。