加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

class – Scala中的主要方法

发布时间:2020-12-16 09:29:21 所属栏目:安全 来源:网络整理
导读:我写了一个Scala类并在其中定义了main()方法。它编译了,但是当我运行它时,我得到了NoSuchMethodError:main。在我看到的所有scala示例中,main方法是在一个对象中定义的。在Java中,我们在类中定义main方法。是否可以在Scala类中定义main()或者我们是否总
我写了一个Scala类并在其中定义了main()方法。它编译了,但是当我运行它时,我得到了NoSuchMethodError:main。在我看到的所有scala示例中,main方法是在一个对象中定义的。在Java中,我们在类中定义main方法。是否可以在Scala类中定义main()或者我们是否总是需要一个对象?

解决方法

要回答您的问题,请查看以下内容:
我做了一个scala类,编译和反编译它,我得到的是有趣的。

class MyScalaClass{
   def main(args: Array[String]): Unit = {
         println("Hello from main of class")
   }enter code here
}

Compiled from "MyScalaClass.scala"

public class MyScalaClass {
      public void main(java.lang.String[]);
      public MyScalaClass();
}

因此,这意味着当scala类转换为java类时,scala类的main方法(而不是转换为java类中的main方法)不是静态的。
因此,我们无法运行该程序,因为JVM无法在程序中找到起点。

但是如果使用’object’关键字完成相同的代码,那么:

Compiling the following:

object MyScalaClass{
 def main(args: Array[String]): Unit = {
  println("Hello from main of object")
 }
}

Decompiling the following:
javap MyScalaClass$.class

Compiled from "MyScalaClass.scala"
public final class MyScalaClass$ {
 public static final MyScalaClass$ MODULE$;
 public static {};
 public void main(java.lang.String[]);
}

Decompiling the following
javap MyScalaClass.class

Compiled from "MyScalaClass.scala"
public final class MyScalaClass {
  public static void main(java.lang.String[]);
}

所以这里我们在MyScalaClass.class中得到了public static void main,因此main方法可以直接由JVM在这里执行。

我希望你得到你的答案。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读