为什么Java中的主程序被放入一个类?

为什么主要方法必须放入一个类? 我理解OOP的主要思想,但我不明白为什么主程序是在一个类中定义的。 这样的类会在某处实例化吗? 我的意思是课外没有代码。 定义类并且从不使用此类的对象的原因是什么?

Java虚拟机 (JVM)必须在某处启动应用程序。 由于Java没有“类外的东西”的概念,因此JVM调用的方法必须类中。 因为它是静态的,所以还没有创建该类的实例。

虽然java在类之外没有方法的概念,但是允许开发人员跳过实际编写类定义的所有文件板并且只是让人们直接编写主函数(如果他们也想要的话)是很容易的。

但是当人们开发java时,人们对OO更加教条,那么他们现在就是,这可能发挥了重要作用。 可以将其视为Opinionated软件的一个示例

它有一个有用的function,您可以将其作为任何类的主要function并将它们作为程序启动。 在您处理这些类的特定function时,它非常方便。 如果main()必须在一个单独的文件中,而不是一个类的一部分,那将使事情变得困难。 如果你想要一个main()函数怎么办? 如果你想编写要由类外的main调用的函数怎么办? 他们会进入全局命名空间吗? 多个main()函数是否会发生碰撞?

不像那些问题是不可能解决的,但除此之外还有一些额外的打字,这对新手来说尤其令人烦恼,目前的解决方案并不算太糟糕,特别是因为IDE会在你创建新文件时生成基本的类结构。

它确实简化了虚拟机的设计。 由于虚拟机已经知道如何运行类的静态方法,因此它可以像处理任何其他静态方法一样处理main方法。

如果将main方法放在除类之外的任何其他构造中,则必须修改VM以了解另一个构造使事情变得更复杂。

设计Java语言时, 一切都必须是对象的概念是一种教条主义的观点。 (虽然他们留下了一些原始类型)。 这些天你可能会设计一种使用闭包的语言 – 甚至是任何一个类之外的语言 – 而不是。

什么@Bombe说。 我想将其添加到OO纯粹主义者,入口类未实例化的事实是失误。 原因是static main阻止某人编写一个主类的族,这些主类共享使用模板方法模式编写的相同main()方法。

如果编写Java以实例化主类并调用main方法,那么用户将享受inheritance和接口的好处。

我们知道main是JVM的入门点。 在java中除了类和接口之外什么都没有。 所以我们必须在类中有一个main方法,它也应该是一个公共类。 并且main应该始终是public static,因为它可以被JVM启动和静态访问,因为它在没有创建任何对象的情况下启动

主要原因是多个类可以有一个main方法。 因此,代码库可以有许多“入口点”,只需使用该类来指定调用哪一个。 此外,这与OO设计一致,其中(几乎)一切都是对象。

java中的main是一个静态方法,因此它所在的类不需要实例化为一个对象,只需要加载该类。

这就是Java的设计方式:(几乎)一切都是对象,代码只能作为类的一部分存在。

由于main()是静态的,因此调用它不会自动导致类的实例化。 但是,完全可能(并且很常见,至少在小型Swing程序和Applet中)使包含main()的类成为一个正常的类,它实例化并像其他任何类一样使用。