開始kotlin語言的學習,kotlin 對於Android 來講還是一門很重要的語言,一起來學習下吧。
簡單知識瞭解:
// var tv_content: TextView? = null//定義一個可空類型 強大的類型推斷
// https://blog.csdn.net/xiaodouyaer624/article/details/82706568
// val 相當於 final 因爲val不存在set方法
// lateinit var tv_content: TextView //lateinit 關鍵字延時加載
// @Override 註解變成了 override關鍵字
// 一個類可繼承 open 關鍵字 和 abstract 關鍵字
// companion 關鍵字 伴生對象 == static
// ? null類型判斷 如果爲空就不會在調用後邊的 tv_content?.setText()
// !! 已經確定不是空,可以放心使用 tv_content!!.setText()
// NPE 空指針異常 《解決空指針問題》
// Int Int? = int Intenger
// 在 java 裏局部變量沒有默認值
// 在 kotlin 都沒有默認值包括全局變量和局部變量
// 字符串拼接 ${變量名} 或 $變量名
/*
字符串換行 <三個引號的作用>
"""
第一行
第二行
第三行
中間不需要 \n
"""
*/
// 構造方法
// 一個類後邊家(),意思是調用了,這個類的無參構造方法
// 一個類存在 主構造函數 和 次構造函數 次構造必須實現主構造函數
// 字段與屬性問題
// 字段 = 屬性 + get() + set()
// 區別:字段會保存狀態,屬性不會保存狀態需要通過幕後字段 Filed 保存狀態
// 幫助理解 幕後字段? 和 幕後屬性?
/*
幕後字段
定義:在Kotlin中定義一個普通屬性時,會爲該屬性生成一個field,getter,和setter,其中這個field就稱爲幕後字段(backing field)
何時會生成幕後字段?
對於var|val屬性
Kotlin自動生成了 setter |getter 產生幕後字段
重寫了 setter |getter 不產生幕後字段
在重寫了的 setter |getter中使用了field 產生幕後字段
幕後屬性
使用private修飾的屬性,就是幕後屬性
延遲初始化屬性lateinit
Kotlin要求所有屬性必須由程序員顯示初始化
定義時初始化
在構造器中賦值初始化
所以例如Activity裏面的控件,都要用lateinit修飾
*/
// Object 等同於 Object
// String? 根 Any?
// String 根 Any --> Any?
/*
PESC Producer exdends Consumer super
取 存
java 中 ? exdends ? super
kotlin 中 out in
kotlin 中 協變 逆變
*/