【问题标题】:How main method called without calling it by classname.mainmethod() [closed]如何在不通过 classname.mainmethod() 调用的情况下调用 main 方法 [关闭]
【发布时间】:2011-09-28 07:05:57
【问题描述】:

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

【问题讨论】:

  • 在此处阅读有关main 方法的所有内容:stackoverflow.com/questions/146576/…
  • 你的“问题”能再准确一点吗?你的意思是main是自动调用的,所以你不用自己显式调用?

标签: java static-methods


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    是的。 java“解释器”获取你给它的类名,寻找一个静态的main方法,将一个字符串数组作为参数并返回void,然后调用这个方法。 Java 解释器可能会使用本机代码执行此操作,但这并不重要。

    如果在一个程序中,你想调用另一个类的 main 方法,你可以。 main 方法在这方面并不特殊。它们唯一的特别之处是它们可以成为 java 解释器的入口点。

    【讨论】:

      【解决方案3】:

      main 方法由 java 解释器在运行类时调用,无需添加类名。 你可以找到更详细的解释@Why is the Java main method static?

      【讨论】:

        【解决方案4】:

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

        public class Foo {
            public static void bar() { ... }
        }
        
        ...
        Foo foo = ...
        foo.bar(); // this will work
        Foo.bar(); // but this is better
        

        【讨论】:

          【解决方案5】:

          它是用 Class.main() 调用的,因为您必须在启动应用程序时提供包含 main() 方法的类。

          【讨论】:

            【解决方案6】:
            But when comming to main(), its not been called by classname.main() even though it is static.
            

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

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

            java 类名

            这是您从命令行执行程序的方式。这里的 ClassName 是您的具有 main 方法的类的名称。

            JVM 使用这个类名来调用你的主方法,例如 ClassName.main()

            所有这些调用都是使用本机代码完成的C/C++。你如果你想知道这一切是如何运作的,可能想用谷歌搜索它。
            如果这不是你要找的,也许你可以再解释一下这个问题。

            希望这会有所帮助。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-04-06
              • 1970-01-01
              • 2016-02-20
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多