/**
* 屬性:類范圍內(nèi)的常量或變量
* 方法:類范圍內(nèi)的函數(shù)
* kotlin自動(dòng)為類的變量設(shè)置getter和setter忱嘹,類中成員變量的默認(rèn)訪問權(quán)限是public
* 屬性初始化
* 1.屬性的初始化盡量在構(gòu)造方法中完成
* 2.無法在構(gòu)造方法中初始化,嘗試降級(jí)為局部變量
* 3.var用lateinit延遲初始化,val用by lazy
* 4.可空類型謹(jǐn)慎用null直接初始化
*/
class A {
var b = 0
var c = 0
get() {
println("嘗試獲取變量b的值")
return field //field是變量c的默認(rèn)值,getter和setter中才能訪問到
}
protected set //單獨(dú)給setter設(shè)置訪問權(quán)限
// protected set(value) {
// println("嘗試設(shè)置變量b的值")
// field = value
// }
/*
類中的變量必須馬上賦值,一開始不想指定值的話,
需加lateinit關(guān)鍵字,但加了之后若是在初始化之前就使用會(huì)報(bào)錯(cuò)的麻敌,
lateinit只能用在var上
*/
lateinit var d: String
val e: X by lazy { //val常量延遲加載
println("init X")
X()
}
}
class X
fun main(args: Array<String>) {
val a = A()
println(a.e)
a.d = "haha"
println(a.d)
}
運(yùn)行結(jié)果