Kotlin學習筆記記錄

關鍵字:
var:定義變量
val:定義常量
fun:定義方法
Unit:默認方法返回值,類似于Java中的void,可以理解成返回沒什么用的值
vararg:可變參數
$:字符串模板(取值)
位運算符:or(按位或),and(按位與),shl(有符號左移),shr(有符號右移),
ushr(無符號右移),xor(按位異或),inv(按位取反)
in:在某個范圍中
downTo:遞減,循環時可用,每次減1
step:步長,循環時可用,設置每次循環的增加或減少的量
when:Kotlin中增強版的switch,可以匹配值,范圍,類型與參數
is:判斷類型用,類似于Java中的instanceof()

在Kotlin里,可以用“?”表示可以為空,也可以用“!!”表示不可以為空。
例如:
var num:Int? = null
val v1 = num?.toInt() //不做處理返回 null
val v2 = num?.toInt() ?:0 //判斷為空時返回0
val v3 = num!!.toInt() //拋出空指針異常(用“!!”表示不能為空)

用var定義變量(像js)
用val定義常量(相當于final)

// 定義變量 必須要初始化
private var name: String? = ""
private val id: String = "122222"
// 簡化 Kotlin支持類型推斷
private var name = ""

// Elvis操作符 ?: 使用變量 如果name為空返回1 也可以寫成name?:1
var name : String? = "xxxx"
name = null
println("length==========" + (name?.length?:1))

// 類型轉換
val b: Byte = 1
val i: Int = b.toInt()

// 類型判斷符 is
//obj在&&右邊自動動轉換成"String"類型
if (obj is String && obj.length > 0){
return obj.length
}

// 范圍操作符 .. 以及 in
if (i in 1..10) { // 等價于 1 <= i && i <= 10
println(i)
}

// 未知類型強轉 必須是對應類型不然拋出異常
var mPwdtoggle = findViewById(R.id.findpwd_btn_eye) as CheckBox

// 創建對象 Kotlin實例化一個對象時不需要new關鍵字
var list = ArrayList()

//定義參數的類型
fun makeTool(id:Int){ //參數id為Int類型
}

//定義函數的返回值
fun getAddr(id:Int):String{ //返回值為String類型
}

// var 延遲加載
private lateinit var default : String
fun initDefault(str : String){
default = str
}

// val 懶加載 只有在第一次被調用時,才會初始化
private val laz : String by lazy{
"懶加載"
}
private val mTextView : TextView by lazy {
findViewById(R.id.money_text) as TextView
}
private val mm by lazy {
findViewById(R.id.money_text) as TextView
}

// 區間和集合
if(x in 1..5){ ...//檢查x數值能否在1到5區間
if(name in list){...//檢查list中能否有某個元素(比Java簡潔多了)
for(i in 1..5){ ...//遍歷1到5
for(item in list){...//遍歷list中的每個元素(相當于Java的for(String item : list))

// 數據類
// 關鍵字Any 等于Object

class Client {
var id: Long = 0
var name: String? = null
var birth: Int = 0
}
// 簡寫
data class Client(var id:Long, var name:String, var birth:Int)
// 添加共享對象 Client.VERSION
data class Client(var name:String){
companion object{
val VERSION = "我是共享對象"
}
}
// 單例 Client2.run()
object Client2 {
val VERSION = "我是共享對象"
init {
println("==========初始化")
}
fun run(){
println("==========run")
}
}

// 輸入表達式
val x = 2
val y = 3
println("===========$x ${x + y}")

// 表達式 替換java switch
override fun onClick(v: View?) {
when (v?.id) {
R.id.button3 -> Toast.makeText(this, "1111", Toast.LENGTH_LONG).show()
R.id.button34 ->{
}
// 相等于default
else -> Toast.makeText(this, "2222", Toast.LENGTH_LONG).show()
}
}

// when自動轉型
when (view) {
is TextView -> toast(view.text)
is RecyclerView -> toast("Item count = ${view.adapter.itemCount}")
is SearchView -> toast("Current query: ${view.query}")
else -> toast("View type not supported")
}

// 類繼承
abstract class Persons{
var name:String? = null
}

class Student : Persons(){
var names:String? = null
}

// 泛型
abstract class DList<T>{
var t: T? = null
}

class Studen : DList<Int>(){
var name:String? = null
}

// 數組
var arr = arrayOf(1, 2)
stringTempl(arr)
fun stringTempl(args: Array<String>) {

}

// for循環
val arr = arrayListOf<String>("1111", "2222")
// 迭代角標
for (j in arr.indices) {
println("1=========" + j)
}

var list = ArrayList<String>()
list.add("xxx")
list.add("qqq")
// 迭代數據
for(str in list){
println("2=========" + str)
}

// 全局方法:不寫類直接寫方法就是全局方法
// 方法簡寫
fun run1(num:Int):Int{
return num + 2
}

fun run2(num:Int) = num + 2

// 回調寫法
button.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
}
})

// lambda表達式 就是把接口名、方法名和參數類型省掉不寫再加個-> 適用于一個方法的接口
// 單參數
button.setOnClickListener{ view ->

}
// 多參數
button.setOnEditorActionListener({ v, id, event ->
false
})
// 多方法
button.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener{
override fun onViewDetachedFromWindow(p0: View?) {
}
override fun onViewAttachedToWindow(p0: View?) {
}
})

// 擴展方法 連class和interface都不寫,直接在文件中寫fun方法
// 類方法擴展 創建kt文件 不需要寫類 直接寫方法就可以 相當于全局方法
public fun View._run(str :String){
Toast.makeText(BaseApplication.getContext(), str, Toast.LENGTH_SHORT).show()
}

擴展方法:
Kotlin中的方法可以直接定義在文件中,而不需要依賴于任何的類,這個稱為擴展方法。
成員方法:
而寫在class或object中的方法則稱成員方法。
本地方法:
定義在方法內部的方法,可以訪問外部函數的私有成員!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,582評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,540評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,028評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,801評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,223評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,442評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,976評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,800評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,996評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,233評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,702評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,721評論 18 399
  • Google在今年的IO大會上宣布,將Android開發的官方語言更換為Kotlin,作為跟著Google玩兒An...
    藍灰_q閱讀 76,968評論 31 489
  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,762評論 0 33
  • google宣布Kotlin作為andorid一級開發語言有一段時間了。在這段時間,我也在新的模塊上嘗試使用了ko...
    鋒ivy閱讀 1,037評論 1 2
  • 最近看到朋友圈瘋轉的《我是范雨素》,除了對作者及文內所述贊同外,感受最深的是讀到她寫到媽媽的片段,我腦海里出現大大...
    泥鰍媽閱讀 323評論 0 0