这个问题是我认识的人问的。我能想到的是,需要main方法接受命令行参数作为方法参数。
是否还有其他论据来保护public static void main(String args[])
方法?
答案 0 :(得分:11)
在应用程序完成之前阻塞“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