Что привлекло мое внимание, что я не могу объяснить себе, так это мысль об этом хорошо известном коде:
String[] str = new String[]{"a","b","c"};
new String[] - это слепок? Если да, то почему мы используем new без скобок? Мы бы использовали:
float i = (float) 3;
Также кажется, что это не конструктор, потому что тогда мы использовали бы его как вызов функции (например, new String[](...)).
Итак, что это за синтаксис и есть ли у нас больше такого в Java?
Это просто «синтаксис» для инициализации массива.
Это выражение создания массива.
"и есть ли у нас еще что-нибудь в Java?" Нет.
@AndyTurner спасибо




Он называется Инициализатор массива, и его единственная цель, как следует из названия, - инициализировать массивы.
Массивы можно создавать несколькими способами, как показано ниже: и вы используете второй, который называется инициализатором массива, в котором вы создаете массив, а также инициализируете его.
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 обновил описание, теперь оно должно быть более понятным
Синтаксис связан с инициализатор массива:
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"};
Что ж, приведение - это тоже часть языка.) Иначе он не компилировался бы
Этот синтаксис является примером 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.
Искусство ответа, которое я искал. Спасибо.
Как вы думаете, почему это не может быть собственный уникальный синтаксис? Почему он должен попадать в другую категорию? Это не актерский состав.