为什么主要方法必须放入一个类?我理解OOP的主要思想,但我不明白为什么主程序是在一个类中定义的。这样的类会在某处实例化吗?我的意思是课外没有代码。定义类并且从不使用此类的对象的原因是什么?
答案 0 :(得分:27)
Java虚拟机(JVM)必须在某处启动应用程序。由于Java没有“类外的东西”的概念,因此JVM调用的方法必须 in 一个类。因为它是静态的,所以还没有创建该类的实例。
答案 1 :(得分:13)
虽然java在类之外没有方法的概念,但是允许开发人员跳过实际写出类定义的所有细节并且让人们编写主要功能直接,如果他们也想要。
但是当人们开发java时,人们对OO更加教条,然后他们就是现在,这可能发挥了重要作用。可以将其视为Opinionated software
的示例它有一个有用的功能,您可以将其作为任何类的主要功能并将它们作为程序启动。在您处理这些类的特定功能时,它非常方便。如果main()必须在一个单独的文件中,而不是一个类的一部分,那将使事情变得困难。如果你想要一个main()函数怎么办?如果你想编写由类外的main调用的函数怎么办?他们会进入全局命名空间吗?多个main()函数是否会发生碰撞?
不像那些问题是不可能解决的,但是其他一些额外的打字,这对新手来说尤其烦人,目前的解决方案也不算太糟糕,特别是因为IDE会在你创建一个新的时候生成基本的类结构文件。
答案 2 :(得分:6)
它确实简化了虚拟机的设计。由于虚拟机已经知道如何运行类的静态方法,因此它可以像处理任何其他静态方法一样处理main方法。
如果将main方法放在除类之外的任何其他构造中,则必须修改VM以了解另一个构造使事情更复杂。
答案 3 :(得分:2)
当设计Java语言时,所有必须是对象的概念是一种教条主义的观点。 (虽然他们留下了一些原始类型)。这些天你也许可以设计一种使用闭包的语言 - 甚至是任何一个类之外的语言 - 而不是。
答案 4 :(得分:2)
@Bombe说的是什么。我想把它添加到OO纯粹主义者,入口类没有实例化的事实是一个失误。原因是 static main阻止某人编写共享使用template method pattern编写的相同main()方法的主类族。
如果已经编写了 来实例化主类并调用main方法,那么用户将享受到继承和接口的好处。
答案 5 :(得分:1)
我们知道main是JVM入门的入口点。在java中除了类和接口之外什么都没有。所以我们必须在类中有一个main方法,它也应该是一个公共类。并且main应始终是public static,因为它应该可供JVM启动和静态,因为它在不创建任何对象的情况下启动
答案 6 :(得分:0)
主要原因是多个类可以有一个main方法。因此,代码库可以有许多“入口点”,只需使用该类来指定调用哪一个。此外,这与OO设计一致,其中(几乎)一切都是对象。
答案 7 :(得分:0)
java中的main是一个静态方法,因此它所在的类不需要实例化为一个对象,只需要加载该类。
答案 8 :(得分:0)
这就是Java的设计方式:(几乎)一切都是对象,代码只能作为类的一部分存在。
由于main()
是静态的,因此调用它不会自动导致类的实例化。但是,完全可能(并且非常常见,至少在小型Swing程序和Applet中)使包含main()
的类成为一个正常的类,实例化并像其他任何类一样使用。