gpt4 book ai didi

java - JVM 在哪里以及为什么检查入口方法 main(String args[]) 的返回类型是否为 void 而不是其他任何东西?

转载 作者:太空狗 更新时间:2023-10-29 21:30:37 25 4
gpt4 key购买 nike

我会尽力回答这两个问题,如果我错了请指正:

地点:如果使用 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 抛出

public static int main(String[] args) { return 1;
}

java.lang.NoSuchMethodError: main Exception in thread "main"

因此,Java 可能要求对入口方法 main() 使用相同的签名,以在所有编写的 Java 程序中保持对称

最佳答案

据我所知,main 在 Java 中返回 void 的原因是线程。

C 和 C++ 都是在多线程成为一种常见的习惯用语之前设计的,而线程从概念上讲就是 Java 不可或缺的一部分。在任何一种非平凡(多线程)程序中,都有多个线程,因此实际上您的程序永远不会从 main 的开始到结束线性运行。

因为 JVM 不会停止执行直到所有非守护线程已经完成运行,从 main 方法返回并不意味着你程序结束。

考虑到这一点,void 确实看起来是最适合 main 的返回类型。

关于java - JVM 在哪里以及为什么检查入口方法 main(String args[]) 的返回类型是否为 void 而不是其他任何东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2431123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com