gpt4 book ai didi

class - Scala 中的主要方法

转载 作者:行者123 更新时间:2023-12-03 08:34:18 24 4
gpt4 key购买 nike

我写了一个 Scala 类并定义了 main()其中的方法。它编译了,但是当我运行它时,我得到了 NoSuchMethodError:main .在我看到的所有 Scala 示例中,主要方法都定义在一个对象中。在 Java 中,我们在类中定义 main 方法。是否可以定义 main()在 Scala 类中还是我们总是需要一个对象?

最佳答案

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

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

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 直接执行。

我希望你得到你的答案。

关于class - Scala 中的主要方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23416536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com