java - 是否有真正的理由将 Java main 放在公共(public)类中?

标签 java

我看到的大多数程序在公共(public)类中都有 main 方法,这与无修饰符类相反。例如:

public class Main 
{
    public static void main(String[] args)
    {
        System.out.println("Hello, World!");
    }
}

而不是

class Main 
{
    public static void main(String[] args)
    {
        System.out.println("Hello, World!");
    }
}

据我所知,将类显式公开的唯一原因是使其对其自己的包之外的类可见。

main 的工作只是充当实际程序 API 的插件,可以轻松地与带有 main 的任何其他类互换(GUI/CUI 一直在变化,并且必须设计为一次性的)。

如果我不希望该类对其他 Java 类可见;如果我需要它,我可以为新的 main 创建一个新的容器类,它知道它可能被其他类使用,并且它将是公共(public)的。

除了教人们以与其中的类相同的方式命名其类之外,是否有任何理由默认为主“公共(public)”创建容器类(如果省略公共(public),则不会强制执行,并导致“混淆”为什么 Foo.java 生成 Main.class?”)?

最佳答案

我认为通常这样做有 3 个原因:

  1. 在非公共(public)类中拥有公共(public)静态方法感觉很奇怪
  2. 主类很少在公共(public) API 库中公开,因此这并不重要。而且IDE一般都会默认生成公共(public)类。
  3. 必须调用 main 方法的 VM 引导代码被视为包的外部代码,因此将类公开以使其可供逻辑上的外部代码访问是正确的。

关于java - 是否有真正的理由将 Java main 放在公共(public)类中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40876176/

相关文章:

java - 使用 RestTemplate 解析本地 JSON 文件

java - 使用IF语句来控制return语句?

java - 如何附加到正在运行的 jar 并调试它?

java - Android 应用程序中的 2 向 SSL 不起作用

java - 扫描可用的 wifi,检测特定的最强 Wifi SSID 以启动 XML Activity 布局

java - 如何在 Java 中以 sudo 权限执行 bash 命令?

java - 如何在编译时强制执行样式规则和约定?

java - 奇怪的 Java 错误/错误 : Stack Overflows, 空指针和双重锁定

java - 我可以通过常规 J​​ava main 方法从 Android 项目运行纯 Java 代码的子集吗?

java - java 9 中 javax.activation 包的替代品是什么?