【问题标题】:Why instead of using the static void main method, it use the non static method为什么不使用静态 void main 方法,而是使用非静态方法
【发布时间】:2018-10-27 07:59:54
【问题描述】:

为什么下面的sn-p代码使用非静态来运行程序???以这种方式运行程序有什么好处???

public static void main(String[] args) {
    Main go = new Main();
    go.start();

}

public Main() {

}

public void start() {
    //SOME CODE HERE

}

【问题讨论】:

  • public Main() 在这种情况下是构造函数,而不是方法。
  • 它使用静态方法 - 第一个执行的是 public static void main(String[] args) 然后 - 在这个方法内 - 对象“Main”被创建,然后是非静态方法 start()被执行。
  • 这个程序仍然使用静态的main方法作为它的入口点。它只是创建Main 类的一个实例,然后调用它的方法。你也可以调用这个类Foo和方法barPeterparker。这不会改变任何事情。入口点始终是main 方法。为什么这样做?在 main 方法中有很多逻辑是非常讨厌的。难以测试,难以使用。
  • 只是想问一下为什么代码要在start()方法中执行,而不是在static void main()中。有什么不同吗???
  • @HuatLee 看看 GhostCat 的答案,它像往常一样以一种很好理解的方式解释了很多事情。除此之外,您还可以查看this question 并提供更多信息。

标签: java static main non-static


【解决方案1】:

基本上,使用main() 简单地实例化相应类的实例,然后调用该对象上的方法有两个优点:

  • 它允许您以更加面向对象的方式“重用”该 Main 类。如果 另一个 类想要使用Main,调用静态方法来实现这一目标通常不是您想要的(它使单元测试更难,例如使用静态方法)。因此,如果“重用”是您的要求之一,那么可以实例化该类,并在不调用其静态 main() 的情况下使用它可能是有益的。

  • 除此之外,它还使得对主类进行单元测试变得更加容易。

【讨论】:

  • 也许改变“一个优势”的措辞(至少对我来说)有点暗示这不是一件好事。就像“好吧,这不是一件好事,但我想一个优势是......”
【解决方案2】:

经典的面向对象方法鼓励封装:一切都必须尽可能本地化,并且类的多个实例必须是可能的。全球是坏的和丑陋的。

面向对象的方法还鼓励继承、多态性和覆盖具有明确定义功能的方法的可能性。或者,组合(从定义明确的子组件组合复杂对象的替代版本)。

虽然单个简单的静态方法看起来与单个简单的非静态方法没有太大区别,但它只能轻松调用该类的其他静态方法,并且只能简单地访问静态变量。

这会阻止高级架构,这些架构对于简单的“hello world”没有任何影响,但如果您想从这个存根中发展出一个庞大而复杂的应用程序,则值得考虑。

【讨论】:

    猜你喜欢
    • 2011-12-11
    • 2011-03-02
    • 2011-02-15
    • 2018-10-22
    • 2010-09-29
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多