【问题标题】:Why main method is written only in object not class?为什么main方法只写在对象而不是类中?
【发布时间】:2018-11-07 05:19:15
【问题描述】:

如何在 scala 中调用 main 方法?为什么main方法只写在object中而不写在class中?

【问题讨论】:

  • 你的假设是错误的。主要方法可以写在对象之外的类中。
  • @Maroun 从什么时候开始的?
  • @AndreyTyukin 不能在类中定义自己的方法,称为main?我不是 Scala 专家,但对这种语言有点熟悉。
  • @Maroun 这当然是可能的,但我认为没有理由将其视为应用程序的入口点。它只是一个普通的方法,意外地带有名称“main”,但这不是JVM上“main方法”下通常理解的内容。 spec 谈论对象,以及将main 方法混合到对象中。与课程无关。
  • 我不确定这个问题到底在问什么。什么是可能的答案? “因为规范是这样说的。”?好的,这就是惯例,现在有什么问题?

标签: scala


【解决方案1】:

因为the specification是这么说的:

程序是一个顶级对象,它有一个类型为(Array[String])Unit 的成员方法main。可以从命令外壳执行程序。程序的命令参数作为 Array[String] 类型的参数传递给 main 方法。

程序的main方法可以直接定义在对象中,也可以继承。

它只谈论顶级对象,而不是类。如果你在一个类中定义了一个main 方法,那么它只是一个普通的方法,你可以在这个类的实例上调用它。除非您定义一个从此类/特征继承 main 的顶级对象,否则此名为 main 的方法将不会被视为应用程序的入口点。

【讨论】:

    【解决方案2】:

    主方法必须是静态方法。在Scala中创建一个静态方法你把它放在一个对象中。类中的方法不是静态的。

    在 Scala 语言中,他们决定将仅保存实例行为和状态的类与保存静态行为和状态的对象分开。这与 java 中的类同时包含实例和静态成员不同,后者使用 static 关键字将某些内容设为静态。

    【讨论】:

    • java main 方法中的另外 1 个 dout 是静态的,因此 jvm 不需要创建它的对象来调用 .当我们在对象中编写方法时,在 scala 中是否会发生同样的事情?
    • 您是在询问 Scala 语言规范或 Scala 的 JVM 实现或其他 Scala 实现(如 Scala-native、Scala.js 或 Scala.NET)的私有内部实现细节吗?
    【解决方案3】:

    这是因为在 scala 中定义静态方法的唯一方法是对象类。而且只需要创建一个主类实例,而不是多个实例。这就是为什么它是对象类

    【讨论】:

      猜你喜欢
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      • 2017-01-18
      • 1970-01-01
      相关资源
      最近更新 更多