Я постараюсь ответить на оба вопроса, пожалуйста, поправьте меня, если я ошибаюсь:
Где:
Если статический метод вызывается с использованием Classname .method () или с помощью отражения, то не имеет значения, даже если вы измените тип возврата вызывающего метода, будет вызываться тот же метод.
Так что JVM, вероятно, проверяет это одним из собственных методов jvm.cpp
methodHandle m (РЕЗЬБА,
init_klass-> find_method (vmSymbols :: object_initializer_name (),>
vmSymbols :: void_method_signature () ));
if (m.is_null ()) {
------ THROW_MSG_0 ……… ..
Почему:
Хотя возвращать значение из main бесполезно, поскольку java ничего с ним не делает, но если мы попытаемся изменить, например, тип возвращаемого значения main на int, JVM выдает
public static int main (String [] args)
{
возврат 1;
}
java.lang.NoSuchMethodError: исключение main в потоке "main"
Таким образом, Java может использовать одну и ту же сигнатуру для метода ввода main (), чтобы поддерживать симметрию во всех написанных Java-программах.