我会尽量回答两个,如果我错了,请纠正我:
其中: 如果使用Classname .method() 或使用反射调用静态方法,那么即使更改调用方法的返回类型也没关系,仍然会调用相同的方法。
所以 JVM 可能会在jvm.cpp的一种本地方法中检查这一点
methodHandle m (THREAD, init_klass->find_method(vmSymbols::object_initializer_name(),> vmSymbols:: void_method_signature() ));
if (m.is_null()) { ------ THROW_MSG_0 ………..
为什么: 虽然从 main 返回一个值是没有用的,因为 java 没有对它做任何事情,但是如果我们尝试将 main 的返回类型更改为 int,例如,JVM 抛出
公共静态int main(String[] args) { return 1;
}java.lang.NoSuchMethodError:线程“main”中的主要异常
因此,Java 可能要求对入口方法 main() 使用相同的签名,以在所有编写的 Java 程序中保持对称性。