Почему в Java требуется аргумент String []?
Я понимаю, что String [] args - это массив строк, переданных в main в качестве параметров.
java Print "Hello, World!"
class Print {
public static void main(String[] args) {
System.out.println(args[0]);
}
}
Однако, когда вы не включаете его в качестве параметра (даже если вы его не используете), он генерирует исключение. Так зачем это нужно? Кроме того, почему он не может быть int [] или boolean []?
Ответы
Ответ 1
Это строка, потому что командная строка выражается в тексте. Если вы хотите преобразовать этот текст в целые числа или логические значения, вы должны сделать это сами - как бы операционная система или загрузчик Java точно знали, как вы хотите, чтобы все было проанализировано? Я полагаю, что Java может искать основной метод с тем же количеством параметров, что и аргументы командной строки, а затем попытаться проанализировать их с помощью Integer.parseInt
и т.д.... но это будет довольно сложно и будет во многих ситуациях по-прежнему неадекватным.
Что касается того, что он является обязательным - в основном разработчики Java решили придерживаться единственной сигнатуры метода, которая, откровенно говоря, проще, чем позволять ей быть необязательной. Было бы возможно, хотя - в С# вы можете иметь любой из
static void Main()
static void Main(string[] args)
static int Main()
static int Main(string[] args)
В конечном счете, это не имеет большого значения, если честно. Нет существенного недостатка в том, чтобы включать параметр.
Ответ 2
Система времени выполнения Java выглядит специально для метода с единственным параметром типа String[]
, потому что он хочет передать параметры вашему методу main
. Если такой метод отсутствует, он информирует вас об исключении.
Если вы хотите обрабатывать параметры командной строки (string) как целые числа или логические значения, вы должны сами выполнить преобразование. Это позволяет обрабатывать условие, в котором кто-то входит "ponies"
, где вы ожидаете целое число.
Ответ 3
То, как был разработан язык. C и С++ оба делают это аналогичным образом, но с отдельным счетчиком, информацией, которая включена в строковый массив для Java.
Вы могли бы сконструировать его для получения целых чисел или логических элементов, но это добавило бы больше работы в среду выполнения Java для потенциально небольшой пользы.
Строки могут использоваться для передачи любой информации в основную программу (включая целые и логические). Не так для целых чисел, если вы хотите передать строку (за исключением того, что пользователь должен вручную закодировать ее как UTF-8 или что-то в этом роде, а не что-то, что может навлечь людей на язык).
Не забудьте объявить об этом. Во что бы то ни стало, поднимите запрос на изменение на языке, если хотите (чтобы сделать его необязательным или разрешить другие подписи), но я подозреваю, что он не будет очень далеко.
Ответ 4
Это конвенция. Метод используется интерпретатором командной строки и тем, как он его ожидает. Более того - компилятор также ожидает подпись в этой конкретной форме и не будет компилироваться, если вы опустите параметр, например
Ответ 5
Параметр string [] используется для сохранения аргументов командной строки с первым именем класса. Более того, если вы вызовете свой основной метод без string [], это будет просто перегрузка, и JVM не будет вызывать этот метод. И если вы пропустите этот основной метод подписи, JVM будет генерировать исключение
Ответ 6
Потому что код, который запускает вашу функцию main()
, очень точно смотрит на эту подпись. Подумайте об этом как о том, где-то:
YourClass.main(new String[] { ... });
Очевидно, что если main принимает что-то еще, это не сработает.