这是一个非常基本的问题,我们很多人都不知道这个答案。在java中,要调用静态方法,我们必须遵循这个classname.method();.但是当提交到main()时,它并没有被classname.main()调用,即使它是静态的。
答案 0 :(得分:3)
了解JVM如何调用“main()”的最佳方法是查看“java”如何调用main方法。 Here是解释相同内容的JNI示例。
mid = (*env)->GetStaticMethodID(env, cls, "main", "([Ljava/lang/String;)V");
...
(*env)->CallStaticVoidMethod(env, cls, mid, args);
答案 1 :(得分:2)
是的。 java“interpreter”接受你给它的类名,查找静态main
方法,将String数组作为参数并返回void
,并调用此方法。 java解释器可能使用本机代码执行此操作,但这并不重要。
如果在程序中,你想调用另一个类的main方法,你可以。 main
方法在这方面并不特别。他们唯一的特殊之处在于它们可以成为java解释器的入口点。
答案 2 :(得分:1)
运行类时,java解释器本身会调用main方法,而不必添加类名。 你可以找到更多细节解释@ Why is the Java main method static?
答案 3 :(得分:0)
您可以在Java中调用静态方法,就好像它们是实例方法一样,但这被认为是不好的做法。
public class Foo {
public static void bar() { ... }
}
...
Foo foo = ...
foo.bar(); // this will work
Foo.bar(); // but this is better
答案 4 :(得分:0)
使用Class.main()调用它,因为在启动应用程序时必须提供包含main()方法的类。
答案 5 :(得分:0)
But when comming to main(), its not been called by classname.main() even though it is static.
你怎么能这样说?我担心你弄错了。
但是,您可以使用object调用静态方法。
通常你永远不会自己调用main。它是你的程序的入口点,JVM调用它来开始执行程序。
这也是您在执行代码时需要传递类名称的原因
记住这一点:
java ClassName
这是从命令行执行程序的方法。这里的ClassName是具有main方法的Class的名称。
JVM使用此类名来调用main方法,例如,ClassName.main()
所有这些调用内容都是使用本机代码完成的 C / C ++ 你可能想谷歌,以防你想知道这一切是如何工作的。
如果这不是你想要的,也许你可以解释一下这个问题。
希望这有帮助。