2013-11-26 8 views
6

Ich war nur durch einen meiner alten Lehrbücher Skimming und fand diese Passage Arrays in Java definieren:Java Lehrbuch: „die Größe eines Arrays muss bei der Kompilierung bekannt sein“

Ein eindimensionales Array ist ein strukturierter zusammengesetzter Datentyp, der sich aus einer endlichen, festen Sammlung von geordneten homogenen Elementen zu zusammensetzt, die direkten Zugriff hat. Endlich gibt an, dass es ein letztes Element gibt. Feste Größe bedeutet, dass die Größe des Arrays bei Kompilierzeit bekannt sein muss, aber es bedeutet nicht, dass alle Steckplätze im Array sinnvolle Werte enthalten müssen.

Ich habe ein grundlegendes Verständnis von Arrays und bin bequem sie in der täglichen Aufgaben, aber ich bin durch die Aussage sehr verwirrt, dass die Größe des Arrays muss zum Zeitpunkt der Kompilierung bekannt sein.

Ein sehr einfaches Java-Programm zeigt, dass ein Array mit einer variablen Größe zur Laufzeit instanziiert werden:

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); 
    } 
} 

Dies kompiliert, führt, und erreicht das Ende ohne Fehler.

Was gibt?

+0

Können Sie zusätzliche Informationen zu diesem bestimmten Lehrbuch (Link, Autor, Name) posten? –

+0

Ich muss sagen, der Autor gibt hier sehr ungenau Definition. OP hat eine sehr gültige Kritik. Ich würde einfach sagen, dass der Autor falsch ist, oder seine Formulierungen nicht seine Idee richtig darstellt. Wenn wir sagen, Array-Größe ist in Kompilierzeit bekannt, sprechen wir über Fall wie (ältere) C/C++ –

+0

Das Buch ist objektorientierte Datenstrukturen mit Java (First Edition) von Dale, Joyce und Weems. Dieser Absatz befindet sich auf Seite 90. – CptSupermrkt

Antwort

3

Es ist ein sehr schlecht formulierter Absatz, aber wenn Sie es locker interpretieren, ist es korrekt.

In Ihrem Beispiel ist die Größe des Arrays zur Kompilierzeit bekannt. Die Größe ist size.

Sie interpretieren "zur Kompilierzeit bekannt" mit "statisch" oder "konstant", was verständlich ist. Natürlich, wie wir wissen, reserviert die JVM Speicher dynamisch basierend auf dem Wert size.

Der Autor versucht wahrscheinlich, zwischen einem Array und etwas wie einem ArrayList zu unterscheiden, wo die Dimensionen bei der Initialisierung nicht angegeben werden müssen.

0

Die Größe eines Arrays ist hier "Größe". Der Compiler kümmert sich nicht darum, was in "Größe" vorhanden sein könnte. Der Arbeitsspeicher wird während der Kompilierzeit nicht zugewiesen und wird während der Laufzeit zugewiesen. Während der Kompilierzeit werden Variablen nicht direkt überprüft, um ihre Werte zu erhalten. Es ist nur während der Laufzeit, dass der Compiler sieht, was in "Größe" vorhanden ist und Speicher reserviert.