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

在Scala中,静态值初始化似乎在调用main方法之前不会发生

发布时间:2020-12-16 08:59:15 所属栏目:安全 来源:网络整理
导读:我的 Scala版本: Scala code runner version 2.9.0.1 -- Copyright 2002-2011,LAMP/EPFL 在名为Static.scala的文件中给出此代码: object Main extends App { val x: String = "Hello,World!" override def main(args: Array[String]): Unit = { println(x)
我的 Scala版本:

Scala code runner version 2.9.0.1 -- Copyright 2002-2011,LAMP/EPFL

在名为Static.scala的文件中给出此代码:

object Main extends App {
  val x: String = "Hello,World!"
  override def main(args: Array[String]): Unit = {
    println(x)
  }
}

当我跑:

scalac Static.scala && scala Main

我知道了:

null

代替:

Hello,World!

我认为x是静态的,因为它是在一个对象中定义的,并且它将在调用main方法之前初始化.

我究竟做错了什么?谢谢!

解决方法

这是因为您使用App特征的方式. App trait使用DelayedInit功能,该功能更改了类主体(包括字段初始化)的执行方式. App trait包括一个main方法,该方法在将args字段绑定到程序的参数之后执行类主体.由于你已经重写了main,因此没有发生这种初始化.使用App trait时,不应提供main方法.您应该将应用程序代码直接放在类主体中,或者不从App trait继承.

(编辑:李大同)

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

    推荐文章
      热点阅读