Scala程序运行报错:类中main方法非静态无法运行的原因是什么?
问题原因解答
- 核心原因是Scala语法规则和JVM程序入口要求不匹配导致的,并非IDE将代码识别为Java:
JVM要求所有运行在其上的程序,入口main方法必须符合public static void main(String[] args)格式,是静态属性、可直接通过类名调用,不需要实例化对象就能执行。 - 你将main方法定义在了普通
class中,而Scala没有Java里的static关键字,普通类里的所有方法都是实例级别的,必须实例化类之后才能调用,不符合JVM的入口要求,所以触发了报错。 - 你之前可以正常运行的写法满足静态要求:
用object main extends App的写法是Scala提供的语法糖,App特质已经内置了符合要求的静态main方法,你写在构造块中的代码会自动作为main方法的执行内容。 - 修复方案非常简单:把你报错代码的外层
class exm改为object exm即可正常运行。Scala的object是单例对象,内部的所有成员都会被编译器编译为静态属性/方法,完全符合JVM的入口要求。
内容的提问来源于stack exchange,提问作者M_Gh
相关产品推荐
相关产品推荐

