Почему основной Java не использует список аргументов переменной длины?
У меня есть вопрос о синтаксисе Java main
объявление:
public static void main (String[] args)
Поскольку при вызове главной функции вы можете передавать переменное число строк, не должно ли это быть списком аргументов переменной длины, а не массивом? Почему вызов этого метода из командной строки со списком строковых параметров вообще работает? (Если нет закулисной обработки, которая создает массив со списком строк и затем передает этот массив методу main...?) Разве объявление main не должно быть чем-то вроде этого...? -
public static void main(String... args)
8 ответов
main(String... args)
а также main (String[] args)
фактически одно и то же: то, что вы получаете, это String
массив. Varargs - просто синтаксический сахар для звонящего.
Я думаю, как вы никогда не звоните main()
Исходя из кода, он не был модернизирован, когда были введены varargs.
Изменить: На самом деле, поцарапать это последнее предложение. main(String... args)
это совершенно правильный синтаксис, конечно. Два стиля полностью взаимозаменяемы. Это работает просто отлично:
public class Test {
public static void main(String... args) {
System.out.println("Hello World");
}
}
Вы можете объявить основной в любом случае, и он работает просто отлично. Нет проблем с "обратной совместимостью" или "дооснащением". Однако читатели вашего кода могут счесть его отвлекающим, и вряд ли он улучшит вашу программу каким-либо образом.
В разделе 8.4.1 Спецификации языка Java (третье издание) говорится, что "если последний формальный параметр является параметром переменной arity типа T, считается, что он определяет формальный параметр типа T []".
Спецификация запуска Java-программы приведена в JLS 12.2, которая ссылается на главу 5 спецификации VM. Раздел 5.2 спецификации VM говорит, что VM вызывает метод открытого класса "void main(String[])
Msgstr "Поскольку спецификация VM не имеет понятия переменной арности, основной, который был объявлен с использованием"...
"удовлетворяет требованию.
Основной метод был разработан для Java 1.0.
Синтаксис "..." был введен в Java 1.5
Он реализован через массив типа, который вы определили (я полагаю, но... если Java 1.4 и 1.5-байтовые коды совместимы, то это должно быть реализовано с массивами).
Нет основного метода Java, фактически вы можете объявить массив как vararg в вашем основном методе:
public static void main(String... args) { System.out.println("Hi!"); }
Разве главное объявление не должно быть чем-то вроде этого...?
public static void main(String... args)
На самом деле, это можно сделать без проблем.
это было String [] args
до появления var args, но в настоящее время оба работают.
Основной синтаксис Java предшествует varargs, которые были введены только в Java 1.5.
Ну, 2-й синтаксис - это просто вариант 1-го, и да, было бы неплохо, но на данный момент он не встроен в Java
Почему тебя это беспокоит? Никто не вызывает основной метод вручную. Это внутреннее для Java.
РЕДАКТИРОВАТЬ: я думаю, это не имеет значения, так как вы можете определить основной метод как:
public static void main(String... args);
Моя точка зрения остается в силе, поскольку никто не вызывает main явно.