包裹main方法的class有什么作用?

What is the role of the class in which the main method is wrapped?

我们知道 main 方法是 java 程序的入口点,如以下资源所述:

Why main() method is needed in java main class?

Why should main be present in a Java class? [duplicate]

如果是这种情况,那么如果 main 方法是入口点,为什么我们需要将 main 方法包装在 class 中?

包装main方法的class有什么作用?

在 Java 中,没有封闭类型的方法是不可能的。您需要 class、接口、枚举等才能声明 and/or 实现方法。这就是它的工作原理。

即使在启动 Java 程序时,您也会指定包含 main 方法的 class 的名称。你不只是 运行 任意陈述。

换句话说,它是关于程序结构的,而不是关于 class 围绕 main 方法所扮演的特定角色。在 Java.

的最新版本中,您甚至可以使用接口代替 class

所有代码都位于一个 .class 文件中,虽然可以为此方法创建一个例外,但这样做会增加创建此类例外的复杂性,而且没有太大改进。

因为您需要将代码放在 .class 文件中,并且每个文件中都有一个 public classinterfaceenuminterface 与文件同名,您仍然需要某种方式在代码中声明文件的名称。例如

而不是

class Main {
    public static void main(String... args) { }
}

你可以

enum Main { ;
    public static void main(String... args) { }
}

interface Main {
    static void main(String... args) { }
}

但您需要将 main 包装在与文件名匹配的名称中。

对于 Java VM,class 文件是交付可执行 Java 代码的唯一途径,Java 库只是包含 class 个文件。

创建Java时,直接映射了源级别Java classes和class文件,所以只有这样才能生成这样的class 包含可执行代码的文件,用于声明 class.

如今,这种关系不再那么严格,存在 Java 语言的非 class 工件可能导致生成 class 文件,例如包注释或模块声明,此外,classes 可能由运行时生成,例如 lambda 表达式。

因此,原则上,可能会有一个新的语言结构允许定义一个独立的 main 方法而不需要 class 声明,它在幕后被编译成 class 文件。但是,由于典型的应用程序只有一个入口点(并且没有命名主机 class,定义多个入口点的可能性无论如何都会消失),因此创建一种新的语言结构是不合理的。

因为与其他语言相比,Java中没有函数

Java只知道方法

区别:方法 绑定到 class,函数不是。

因此,为了有一个 first 方法开始,那个东西仍然是一个方法,需要一个封闭的 class。

换句话说:在 java 中,给一段代码赋予 名称 的唯一方法是将它变成一个方法。 (你真的希望你的 "starting point" 有一个名字)并且方法需要进入 class,这在查看 Java 语言规范时有点隐含(第 8.2 章,class members).