Answers:
您的朋友提出的观点是,应用程序仅应由main方法引导,仅此而已。通过将main方法放在自己的类中,您可以通过独立于任何应用程序逻辑来简单地增强该事实。main方法的作用是解析任何输入,并使用这些输入(可能还有其他输入)初始化应用程序。
public static void main(String[] args){
new Foo().start(args[0]);
}
这个想法是你不需要 main方法来初始化Foo
。这使您可以轻松地Foo
在可能具有不同语义的其他上下文中初始化和启动。
public Foo initSomewhereElse(String arg){
Foo f = new Foo();
f.start(arg);
return f;
}
主()方法是一个Ñ难看倒退到过程编程,从而提供的入口点中的应用。试图用各种编程语言来封装它,但是它的本质使它变得困难(它必须是公共的和静态的,但是绝不能从程序中的其他任何地方调用它,这是非常矛盾的)。WPF成功地实现了(通过将main()隐藏在WPF应用程序项目的深处,并为自定义处理提供了可配置的“挂钩”),就像Java一样(对于Android应用程序也是如此),但是WinForms和大多数其他类型的应用仍然可以让您处理main()。
因此,大多数专家都说main()函数的LOC应该尽可能低。有一种方法(我认为有些过大),其中main()函数只有一行:
public class Program
{
private Program(string[] args)
{
//parse args and perform basic program setup
}
//Reduce the ugliness to the absolute minimum
public static void main(string[] args)
{
new Program(args).Run();
}
private void Run()
{
//kick off the driving O-O code for the app; i.e. Application.Run()
}
}
这有点多,但是我同意基本原则。main()应该尽可能少地使面向对象的,事件驱动的应用程序进入“就绪”状态。
main
从其他上下文(例如,递归)中调用可能会很有用。
在支持功能的语言中,main
它只是一个常规功能,因此除了您所说的之外,您无法执行其他任何其他操作。然后,有一些愚蠢的语言抛弃了函数,而将所有东西都当作对象,这意味着每当您想要一个函数时,都必须将其包装在一个不必要的类中。
好吧,够乱的。我要说明的是,它Main
实际上不是一个类,而是一个函数,因此除了解析输入,创建其他对象和调用其他方法外,您不应该做任何事情,因为这是函数所能做的。