Подтвердить что ты не робот

Тип возврата main в java

Мне нравится знать, почему только тип возврата void для основного метода в java.

public static void main(String [] args)

Почему для основного метода нет других типов возврата, отличных от void.

Спасибо

4b9b3361

Ответ 1

Короткий ответ: Потому что это говорит о статус выхода, который это небольшое число (обычно 8 бит). Это значение может быть возвращено из программы Java с помощью метода System.exit(int):

public static void exit(int status)

Завершает работу запущенной виртуальной машины Java. Аргумент служит в качестве кода состояния; по соглашению, ненулевой код состояния указывает на ненормальное завершение.

Ответ 2

Чего вы ожидали вернуться?

В C вы обычно возвращаете код выхода int. Однако в многопоточной системе это не имеет большого смысла. Обычно программа Java запускает несколько потоков. Основной поток часто возвращается более или менее немедленно.

System.exit может использоваться для выхода с определенным кодом выхода.

Ответ 3

Похоже на произвольное решение, возможно, учитывая, что не все операционные системы являются unixy в том смысле, что они позволяют программе возвращать код выхода.

Java может быть указан как C с кодом возврата int от main. Многопоточность не имеет значения, потому что есть только один поток, который изначально запускает главную, и его возвращаемое значение может быть тем, которое будет возвращено ОС ОС JVM, независимо от того, когда будут возвращаться другие потоки и что они делают.

Это надуманно, но если кто-то создал JVM, который может запускать несколько Java-программ, каждый со своим собственным main, он может быть создан для возврата значения, возвращаемого последним main для вызова.

Самое разумное обоснование заключается в том, что самому JVM может потребоваться вернуть код выхода по собственному усмотрению, однако это обоснование опровергается предоставлением System.exit(int), которое точно переопределяет код возврата JVM. Учитывая это, нет оснований так же разрешать main возвращать int тоже, как если бы последнее, что main было System.exit(n)

В целом, звучит как произвольное решение.

Ответ 4

Во-первых, потому что нечего возвращать значения. Основные операционные системы (например, Windows, UNIX, Linux и т.д.) Не позволяют командам "возвращать" значения. (Хотя, возможно, код выхода является возвращаемым значением, но он ограничен целым числом, и существуют различные предостережения, специфичные для ОС, например, сколько из битов может поступать из приложения.)

Во-вторых, поскольку Java не позволяет перегружать методы, которые отличаются только типом возвращаемого значения.

В-третьих, как указывает @Tom, если exit code было возвращаемым значением main, было бы сложно иметь дело с другими потоками, вызывающими System.exit(rc).

Ответ 5

Java указывает, что точка входа приложения должна быть public static, с именем main, возвращает void и принимает параметр String[] в качестве параметра. Это так, как есть.

Тем не менее, вы можете технически определить метод main, который не соответствует этим критериям, но они не будут действительной точкой входа приложения.

public class MainMain {
    public static void main(String args[]) { // application entry point
        System.out.println(main());
    }
    private static String main() {           // just a method named main
        return "Hello world!";
    }
}

Вероятно, вы должны зарезервировать main только для допустимых точек входа Java-приложений, но ничего не мешает вам писать код, как указано выше.

Ответ 6

Поскольку вы запускаете main из JVM Hello.main, мы не можем вернуть значение JVM. Он просто дает исключение времени выполнения.

Ответ 7

Разумный средний путь (между наличием подписи Void, но также необходимостью вернуть значение ОС) мне представляется следующим: Чтобы исключить исключение Runtime в main для всех возвращаемых значений, соответствующих ошибке, с соответствующее сообщение в этом исключении.

Конечно, это помогает только дифференцировать ошибки и выходы без ошибок на уровне ОС (скажем, оболочку script и т.д.), но во многих случаях это на самом деле все, что необходимо, и, возможно, наиболее общее использование этих возвращаемых значений окружающей среды; либо запустить, либо не запускать следующую команду, если эта команда завершилась с ошибкой.