2011-09-28 77 views
-4

这是一个非常基本的问题,我们很多人都不知道这个答案。在java中,要调用静态方法,我们必须遵循这个classname.method();.但是在调用main()时,即使它是静态的,它也不会被classname.main()调用。如何调用main方法而不用classname.mainmethod()调用它()

+5

请阅读有关'main'方法的所有信息:http:// stackoverflow。com/questions/146576/why-is-the-java-main-method-static – michael667

+3

你可以对你的“问题”更精确一点吗?你的意思是'main'被自动调用,所以你不必明确地自己调用它? –

回答

3

了解如何通过JVM调用“main()”的最佳方法是查看“java”如何调用您的主要方法。 Here是解释相同的JNI例子。

mid = (*env)->GetStaticMethodID(env, cls, "main", "([Ljava/lang/String;)V"); 
    ... 
(*env)->CallStaticVoidMethod(env, cls, mid, args); 
0

你可以调用Java中的静态方法,就像它们是实例方法一样,但这被认为是不好的做法。

public class Foo { 
    public static void bar() { ... } 
} 

... 
Foo foo = ... 
foo.bar(); // this will work 
Foo.bar(); // but this is better 
0

它被称为与Class.main()作为必须提供启动应用程序时包含main()方法,类。

2

是的。 java“解释器”接受你给它的类名,寻找一个静态的以String数组为参数的方法并返回void,并调用这个方法。 Java解释器可能会使用本机代码来完成此操作,但这并不重要。

如果在一个程序里面,你想调用另一个类的主要方法,你可以。 main方法在这方面不是特别的。他们唯一特别的事情是他们可以成为Java解释器的入口点。

0
But when comming to main(), its not been called by classname.main() even though it is static. 

你怎么能这么说?我怕你错了。
不过,您可以使用对象调用静态方法。

通常情况下,你永远不会自己调用main.It是程序的入口点,JVM会调用它来启动程序的执行。
这也是您在执行代码时需要传递类名称的原因。
记住这一点:

Java类名

这是你如何在命令行中执行你的计划。这里的ClassName是具有主要方法的Class的名称。

此类名称由JVM打电话给你的主要方法如ClassName.main()

而这一切的呼叫东西使用本机代码完成C/C++。你可能想谷歌,在如果你想知道所有这些如何工作。
如果这不是你正在寻找的东西,也许你可以更多地解释这个问题。

希望这会有所帮助。