Хотя тип возврата не является частью сигнатуры метода, JVM ищет точное объявление как
public static void main(String[] args)
Мое предположение заключается в том, что поскольку в сигнатуре метода нет включенного типа возврата, я должен быть разрешено изменять тип возврата.
Но если я изменил его на public static int main(String[] args)
и вернул значение, скажем 0, JVM не сможет выполнить программу и выходит с ошибкой
Error: Main method must return a value of type void in class TestData, please
define the main method as:
public static void main(String[] args)
Почему спецификации Java требуют, чтобы основной метод был недействительным? Почему это ограничение, когда тип возврата не является частью сигнатуры метода?
Этот вопрос отличается от Почему main() в java void?: этот вопрос закрыт, поскольку он основан на мнениях, в то время как я ищу места кода/процессы, из которых JVM вызывает этот метод, и каковы ограничения, которые вынуждают их поддерживать этот метод как недействительный. Каковы принятые ими проектные решения (и аргументы позади), и где это задокументировано.
Я ищу факты, чтобы узнать причину, почему это так. Пожалуйста, не помещайте его в дубликат, не просматривая детали вопроса.
PS: выход, это еще одна вещь. Меня больше беспокоит вход в программу. Кроме того, возвращаемое значение может быть не связано с использованием JVM, ограничивая его расширением допустимых пределов.
До сих пор я узнал из этого вопроса: спецификации Java имеют явно установленный тип возвращаемого значения, чтобы избежать путаницы с мигрирующими программистами (C/CPP), которые могут ожидать, что это значение вернется к ОС, но поскольку JVM находится между ними значение никогда не будет возвращено ОС. Для этого специального назначения (возвращаемого значения для ОС) они предоставили метод System.exit().
Для всех тех, кто предлагает, чтобы возвращаемый тип был частью сигнатуры. Просто попробуйте определить оба следующих метода в классе
public static void main(String[] a){
}
public static String main(String[] a){
}
Вы получите ошибку компиляции, потому что подпись обоих этих методов одинакова.