如何调用main方法而不通过类名调用它.main方法()

时间:2011-09-28 07:05:57

标签: java static-methods

这是一个非常基本的问题,我们很多人都不知道这个答案。在java中,要调用静态方法,我们必须遵循这个classname.method();.但是当提交到main()时,它并没有被classname.main()调用,即使它是静态的。

6 个答案:

答案 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 ++ 你可能想谷歌,以防你想知道这一切是如何工作的。
如果这不是你想要的,也许你可以解释一下这个问题。

希望这有帮助。