【问题标题】:Is there a real reason to have Java main inside a public class?是否有真正的理由在公共类中使用 Java main?
【发布时间】:2016-11-29 21:35:58
【问题描述】:

与无修饰符类相比,我看到的大多数程序在公共类中都有 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 创建一个新的容器类,它知道它可能被其他类使用,并且它是公共的。

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

【问题讨论】:

  • 写了 10 年的程序真的很困扰吗?
  • 好点我删除它。
  • 我只想说出于清洁的原因......

标签: java


【解决方案1】:

我认为通常采用这种方式的原因有 3 个:

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

【讨论】:

    【解决方案2】:

    我不认为这有技术原因。

    我能想到的非技术原因是:

    • 公约。有多少人看到非公开的主课会感到惊讶?这个惊喜有什么好处吗?
    • 意向表达。 public 表示公开,无修饰符表示包私有。我认为主类是供公众使用的,所以public 是这个意图的更好表达。

    【讨论】:

    • 你是对的,当我看到一个没有修饰符的类时,我需要考虑为什么它没有修饰符,而如果我看到公共或私有类,那么它的原因就很明显了。
    猜你喜欢
    • 2014-08-28
    • 2011-06-15
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 2012-11-06
    相关资源
    最近更新 更多