2013-11-26 4 views
6

Я просто скимминг через одну из моих старых учебников и нашел этот отрывок, образующую массивы в Java: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

Должен сказать, автор дает очень неточное определение здесь. ОП имеет очень действительную критику. Я бы просто сказал, что автор ошибается, или его формулировки не представляют его идею правильно. Когда мы говорим, что размер массива известен во время компиляции, мы говорим о таком случае, как (старше). C/C++ –

+0

Книга представляет собой объектно-ориентированные структуры данных с использованием Java (первое издание) от Dale, Joyce и Weems. Этот пункт находится на стр. 90. – CptSupermrkt

ответ

3

Это очень плохо сформулированный абзац, но если вы его интерпретируете свободно, это правильно.

В вашем примере размер массива -, известный во время компиляции. Размер: size.

Вы интерпретируете «известные во время компиляции» «статические» или «постоянные», что понятно. Конечно, как мы знаем, JVM распределяет память динамически на основе значения size.

Возможно, автор пытается различить массив и что-то вроде ArrayList, где размеры необязательно должны быть указаны при инициализации.

0

Размер массива здесь «размер». Компилятор не беспокоится о том, что может быть в «размере». Память не выделяется во время компиляции, ее выделяется во время выполнения. Во время компиляции переменные не проверяются напрямую, чтобы получить их значения. Его только во время выполнения, что компилятор видит то, что присутствует в «размере» и выделяет память.

Смежные вопросы