当你有静态块时,为什么我们需要main方法

时间:2011-04-08 04:38:17

标签: java

这个问题是我认识的人问的。我能想到的是,需要main方法接受命令行参数作为方法参数。

是否还有其他论据来保护public static void main(String args[])方法?

5 个答案:

答案 0 :(得分:11)

  • 可以测试主要方法
  • 它可以从其他类
  • 调用主方法
  • 它可以多次调用main方法,而类型初始化只发生一次
  • 它可以在不运行程序的情况下创建包含main方法的类的实例。

在应用程序完成之前阻塞“main”类的类型初始化的想法是令人憎恶的。

可以我们应对吗?我敢说。但我怀疑我总是写作:

public class EntryPoint
{
    static
    {
        // Workaround for entry points being static initializers
        String[] arguments = getArgumentsHoweverThatHappens();
        RealEntryPoint.execute(arguments);
    }
}

......没有其他任何东西可以触及EntryPoint

答案 1 :(得分:8)

静态初始化器和main方法有不同的意图。当且仅当JVM以包含类作为主类(或者直接由代码调用)调用时,才调用main方法的目的。静态初始化的目的是进行类初始化。始终会运行初始化程序,但可以使用非主要方法。

答案 2 :(得分:8)

除了上述说明之外,对main(不是静态块的特性)的需求是你的应用程序需要一个起点,也就是说,当你执行你的应用程序时,你传递了几十个类的JVM并且JVM需要知道首先调用哪个方法才能启动和执行您的应用程序。您需要声明哪个点是应用程序的开头,因为JVM无法猜测它。 (对不起我的英文)

答案 3 :(得分:4)

静态块应在加载相应的类后运行。然而,main()是您的程序的入口点,正如Jon所说,它可以被多次调用。

答案 4 :(得分:1)

主要是因为C。

如果任何公共静态方法可以作为入口点,而不仅仅是main

,那将是很好的