Какой тип синтаксиса используется для инициализации литерала массива Java "new Type [] {...}"?

Что привлекло мое внимание, что я не могу объяснить себе, так это мысль об этом хорошо известном коде:

String[] str = new String[]{"a","b","c"};

new String[] - это слепок? Если да, то почему мы используем new без скобок? Мы бы использовали:

float i = (float) 3;

Также кажется, что это не конструктор, потому что тогда мы использовали бы его как вызов функции (например, new String[](...)).

Итак, что это за синтаксис и есть ли у нас больше такого в Java?

Как вы думаете, почему это не может быть собственный уникальный синтаксис? Почему он должен попадать в другую категорию? Это не актерский состав.

Michael 10.12.2018 10:53

Это просто «синтаксис» для инициализации массива.

ernest_k 10.12.2018 10:54

Это выражение создания массива.

Andy Turner 10.12.2018 10:54

"и есть ли у нас еще что-нибудь в Java?" Нет.

Michael 10.12.2018 10:54

@AndyTurner спасибо

DIBits 10.12.2018 11:00
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
123
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Он называется Инициализатор массива, и его единственная цель, как следует из названия, - инициализировать массивы.

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

int[] abc = new int[3];   // This means an array of integers with size 3 is created.

int[] def = new int[]{1,2,3};   // This means an array of integers with size 3 is created and also initialized with the values 1, 2 and 3.

Во втором утверждении я создаю массив целых чисел с элементами 1, 2 и 3, где размер неявно равен 3.

Итак, в вашем случае String[] str = new String[]{"a","b","c"};, этот оператор создает массив значений String с элементами «a», «b» и «c» с неявным размером массива равным 3 из-за трех элементов, которыми он инициализируется.

Я не спрашивал, как создать массив на Java

DIBits 10.12.2018 10:58

@DIBits обновил описание, теперь оно должно быть более понятным

Ankur Chrungoo 10.12.2018 11:00

Синтаксис связан с инициализатор массива:

An array initializer may be specified in a field declaration (§8.3, §9.3) or local variable declaration (§14.4), or as part of an array creation expression (§15.10.1), to create an array and provide some initial values.

По сути, вы не только создаете массив, но и инициализируете все его поля в одной инструкции.

Это не гипс.


Обратите внимание, что код:

String[] str = new String[]{"a","b","c"};

- это единственная команда для создания и инициализации массива, но также можно использовать менее подробную версию:

String[] str = {"a","b","c"};

Что ж, приведение - это тоже часть языка.) Иначе он не компилировался бы

DIBits 10.12.2018 11:43
Ответ принят как подходящий

Этот синтаксис является примером 10.6. Инициализатор массива как части 15.10.1. Выражение создания массива.

An array initializer may be specified in a field declaration (§8.3, §9.3) or local variable declaration (§14.4), or as part of an array creation expression (§15.10.1), to create an array and provide some initial values.

new String[]

- выражение создания массива и

{"a","b","c"}

- инициализатор массива.

Поскольку в выражении создания массива нет выражения измерения (т.е. ничего внутри квадратных скобок), должен быть инициализатор массива:

If there are no dimension expressions, then there must be an array initializer. A newly allocated array will be initialized with the values provided by the array initializer as described in §10.6.

Искусство ответа, которое я искал. Спасибо.

DIBits 10.12.2018 13:13

Другие вопросы по теме