2013-11-09 6 views
4

Я знаю, что в public static void main(String args[])args - массив, который будет хранить аргументы командной строки. Но поскольку аргументы командной строки передаются во время выполнения, является ли массив args[] динамическим массивом? В Java мы знаем, что для выполнения такого задания используется ArrayList, и как простой объект массива хранит эти аргументы во время выполнения?Не является основным (String args []) динамическим массивом?

+2

Определите «динамический массив». В Java размеры массива не обязательно должны быть константами времени компиляции. –

+0

Все массивы являются «динамическими» на Java в том смысле, что их размер не является частью их типа. –

ответ

3

Массивы Java могут иметь свой размер, определенный во время выполнения, а не только время компиляции (в отличие от массивов, выделенных стеком C). Однако размер массива не может быть изменен после его создания.

Совершенно допустимо иметь массив, созданный во время выполнения. Это не возможно изменить размер после того, как он был создан, хотя:

int argCount = 5; 
    // ... 
    String test[] = new String[argCount]; 

ArrayList позволяет расти и уменьшить размер основного списка во время выполнения.

+1

... откровенно говоря, у C также есть массивы времени исполнения, они просто не раскрывают их размер каким-либо образом. – Griwes

+1

@Griwes C89 не имеет, если вы не хотите вызывать результат массива 'malloc'. – delnan

+1

@Griwes Я имел в виду стеки выделенных массивов в C, я сделал эту точку немного более ясной (надеюсь) – Steve

0

Почему, по вашему мнению, массив args должен быть динамическим? Виртуальная машина Java просто вызывает основной метод и передает аргументы командной строки в виде массива String. За этим больше нет «магии»!

3

Каждый размер определяется во время выполнения. Часть, которая не является динамической, состоит в том, что массив не может изменить свой размер после того, как создан, и это также относится к массиву, переданному в main.

1

Каждый массив, передаваемый каждой функции, является динамическим в том смысле, что массив имеет динамический от предполагаемого вызова. Что касается специального случая основного; там - это механизм под названием globbing, который запускает оболочка (или командный процессор) операционной системы , чтобы затем вызвать главную функцию (иногда также называемую точкой входа). Но это функция самой операционной системы (и JVM).

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