我想知道scala类的这种行为,它显示在代码片段中。执行下面的代码打印hi
,我的困惑是在后台发生的事情,没有任何方法和字段定义,TestClass的调用执行裸代码?同样为什么允许在类中编写这种裸码?
class TestClass {
if(true)
println("hi")
}
object TestObject extends App{
val ci = new TestClass
}
答案 0 :(得分:3)
类,对象或特征的主体(方法定义除外)是其(主)构造函数。扩展DelayedInit
(或App
,扩展DelayedInit
)的类和对象更复杂。
答案 1 :(得分:1)
'裸露'的特殊语法类中的代码是Scala相当于Java的初始化器/匿名构造函数,它们在代码周围使用大括号。 Java中的初始化程序和Scala类中的代码都是在对象创建时执行的,这是TestObject
在使用TestClass
调用new
构造函数时所执行的操作。