主构造函数
次构造函数:我们可以定义多个次构造函数来配置不同的参数组合。
定义构造函数时,可以给构造函数的参数指定默认值,如果用户不提供值参,就使用这个默认值。
class Player2(
_name: String,
var age: Int = 20,
var isNormal: Boolean
) {
var name = _name
get() = field.capitalize()
set(value) {
field = value.trim()
}
constructor(name: String) : this(name, age = 10, isNormal = false)
constructor(name: String, age: Int) : this(name, age = 10, isNormal = false){
this.name = name.toUpperCase()
}
}
val p = Player2("Jack", 20, true)
val p2 = Player2("Rose")
val p3 = Player2("Jacky",20)
val p4 = Player2(isNormal = false,_name ="Jack")
初始化顺序
延迟初始化
lateinit :变量在用的时候才初始化 需要手动初始化 否则报错
lateinit var equipment:String
equipment = "sharp knife"
惰性初始化:一个属性先写好初始化的函数,暂时还不会执行, 只有当你使用调用的时候才会执行该函数
class Player5(_name:String) {
var name = _name
val config by lazy {loadConfig()}
// val config = loadConfig() //loading... xxx
private fun loadConfig():String{
println("loading...")
return "xxx"
}
}
fun main() {
val p = Player5("Jack")
Thread.sleep(3000)
println(p.config)
}