scala里面的方法定义先于执行体加载,所以下面问题是没有问题的 ,println(f) 先于定义
object Constructor { class Test{ println(f); def f = { "I am here!!!" } } def main(args: Array[String]): Unit = { new Test; } }
构造器是构造新的对象,首先初始化类中的定义的变量和方法,然后进入类体,之上往下加载类如:
class Constructor2 {
var x = 0
def f() ={
x=12
}
f()
}
object Constructor2{
def main(args: Array[String]): Unit = {
var constructor2 = new Constructor2
println(constructor2.x)
}
}
辅助构造器 this,通过this 可以重载构造器
package test
class Constructor2(var a:Int,val b:String="tiantian") {
var x = 0
def f() ={
x=12
}
def this(c:Int){
this(c,"tom")
}
}
object Constructor2{
def main(args: Array[String]): Unit = {
var constructor2 = new Constructor2(12)
println(constructor2.a)
println(constructor2.b)
}
}
output:
12
tom
Process finished with exit code 0