Kotlin 入門基礎語法學習筆記
阿新 • • 發佈:2019-02-13
敲了一天的kotlin基礎語法,整理歸納到一個類裡面,便於以後忘記的時候複習。
/** * Created by GG on 2017/11/20. */ //main函式 fun main(args: Array<String>) { var testMain = TestMain() print(testMain.array()) } class TestMain { //單例的寫法 companion object { @Volatile var instance: TestMain? = null get() { if (field == null) { synchronized(TestMain::class.java) { if (field == null) field = TestMain() } } return field } } //變數定義 var name: String = "" //常量陣列int[][][] arrs = new int[3][2][1]; val arrs = Array(3) { Array(2) { IntArray(1) } } val list = arrayListOf(String)//arrayListOf("a","b") //返回一個String fun testFun(name: String) { this.name = name println(this.name) } //加法函式,普通寫法 fun add(a: Int, b: Int): Int { return a + b } //加法函式表示式寫法(public 方法必須寫出返回型別) fun add2(a: Int, b: Int): Int = a + b //無返回值函式 fun noBack(msg: String, num: Int) { print(msg + num) } //可變長度引數函式 fun extend(vararg v: Int) { for (tempV in v) { print(tempV) } } //lambda函式 ** fun testLambda() { val sumLambda: (Int, Int) -> Int = { x, y -> x + y } } //字串模板 $ 的用法 fun testString() { var a = 1 var s1 = "a is $a" //a is 1 println(s1) a = 2 var s2 = "${s1.replace("is", "was")}" //a was 1 println(s2) } //陣列 fun array() { //陣列的兩種寫法 var arrays = arrayOf(1, 2, 3) var arraysb = Array(3, { i -> (i * 2) }) arraysb[1] = 111 println(arraysb.toList().toString()) } fun str() { val text = "" } //NULL 檢查機制 跑出異常加!! 允許為空加? fun testNull() { var age: String? = null //型別後面加?表示可為空 var age1 = age!!.toInt() //跑出空指標異常 var age2 = age?.toInt() //不對空null 做處理 var age3 = age?.toInt() ?: -1 //如果為空返回- 1 // print(age3) } //比較 fun compare() { var a: Int = 5222 println(a === a) //物件地址相等,值相等 val box1: Int = a val box2: Int? = a //這裡遇到了一個問題,如果 ?=是可以正常裝箱的,但是 = 會導致box1和box2的物件地址一直相等 //說明只有 ?=才會正常裝箱,而 = 則是直接賦值 //還要注意的是-127-128在JVM中是快取的,所以無論是否裝箱都會相等,指向相同的記憶體地址 println(box1 == box2) println(box1 === box2) println(a === box1) println(a === box2) println(a.javaClass) } //型別檢查和自動轉型 (Int? 表示為如果返回值不是Int,會返回空) fun getStringLenght(obj: Any): Int? { if (obj is String) { // 做過型別判斷以後,obj會被系統自動轉換為String型別 return obj.length } //在這個分支中 if (obj !is Int) { return null } //這裡被轉為了Int型 return obj //甚至可以在同一個表示式中進行轉換,這裡可以看到obj.length == 2中obj已經成為String型別 if (obj is String && obj.length == 2) { return obj.length } //這裡的obj仍然是Any型別 return null } //區間演算法 fun interval() { //輸出1234 for (i in 1..4) print(i) //什麼都不輸出 for (i in 4..1) print(i) //等同於 1 <= i && i <= 10 var i: Int = 2 if (i in 1..10) { println(i) } //使用step指定步長 for (i in 1..4 step 2) println(i) //輸出13 for (i in 4 downTo 1 step 2) println(i) //輸出42 //使用utils 函式排除結束元素 for (i in 1 until 10) print(i) } }