1. 程式人生 > >Kotlin 入門

Kotlin 入門

1、引入Kotlin

1、新專案引入

在新建專案的時候勾選Include Kotlin support,如下圖
在新建專案的時候勾選Include Kotlin support

2、現有專案引入

Tools->Kotlin->Configure Kotlin in Project

不管如何引入的本質上都是在build.gradle上引用:
project build.gradle:
在這裡插入圖片描述

在app或者module的build.gradle:
在這裡插入圖片描述
kotlin-android-extensions 可以讓我們不在寫findviewbyid,後面會詳細介紹。

2、基本語法

1、定義屬性

Kotlin中定義屬性只有2個關鍵字:var和val
var:可變變數
val:只讀變數

	var name:String = "qwe" //對應Java String name = "qwe";
    var age = 12 //對應Java int age = 12,如果不指定kotlin根據值進行推斷
    var a:String //編譯不過去,Kotlin 定義屬性的時候必須初始化或者使用lateinit
    lateinit var a1:String
    var b:String = null  //編譯不過去,屬性型別如果不加?則代表此屬性不能null
    var c:String? = null
    
    val d = 0 //只讀變數
    d = 1 //編譯不過去

這些是最基本的,也是我們常用的,當然還有很多細節後面詳細說明。

2、定義函式、方法


    fun add(a:Int,b:Int):Int{
        return 0
    }

    override fun equals(other: Any?): Boolean {
        return super.equals(other)
    }

fun:定義方法的關鍵字
add:方法名
括號內:方法引數,注意引數的型別要放在引數後面,以“:”連線
括號後面接:Int:是返回的型別,如果無返回值可以不寫。
override:重寫父類方法

對應Java寫法:

	int add(int a,int b){
        return 0;
    }

    @Override
    public boolean equals(Object obj) {
        return super.equals(obj);
    }

3 定義class

open class Person constructor(var name:String,var age:Int =1) {

    init {
        //初始化的時候呼叫
    }

    /**
     * 次建構函式
     * this:必須
     */
    constructor(name: String):this(name,10){

    }
    constructor(name: String,age: Int,sex:String):this(name){

    }
}

class Student(name: String) : Person(name) {

    constructor(name: String, age: Int) : this(name) {

    }
}

    var person = Person("qw")
    var person1 = Person("q",12)

1、定義類的關鍵字是:class
2、Kotlin的類預設是final,也就是不可被繼承,如果想被繼承則需要在class前加open關鍵字。
3、類名後面的constructor()是主建構函式,正常情況下constructor可以省略,但如果在建構函式上有註解則不可省略,比如dagger框架

class DataManager @Inject constructor(){}

4、主建構函式中的引數不需要寫get/set方法,訪問的時候可以直接這樣寫:

		var age = person.age //get
        person.age = 100 //set

5、引數可以有預設值,如age
6、init{} 在初始化的時候呼叫。
7、次建構函式在類體內,並且必須直接或者間接委託主建構函式(this)
8、例項化:不需要new 關鍵字
9、類的繼承(extends)和實現(implements)用 : 代替
10、注意init{}在次建構函式前執行
11、如果沒有定義任何主建構函式和次建構函式,系統預設生成一個無參的主建構函式,而且是public的,如果不想要無參建構函式可以這樣:

class DontCreateMe private constructor ()

12、建構函式函式可以用預設值,如果所有的引數都有預設值,系統將會生成一個無參的建構函式,引數使用預設值

4、常用的迴圈控制語句

1、if…else

1、Kotlin中的if…else和Java一樣,在Kotin中if…else可以當作表示式

val max = if (a > b) a else b

2、when

	when (x) {
            1 -> print("x == 1")
            2 -> print("x == 2")
            else -> { // Note the block
                print("x is neither 1 nor 2")
            }
        }

	when (x) {
            in 1..10 -> print("x is in the range") // .. 表示 [1,10] until:[1,10)
            !in 10..20 -> print("x is outside the range")
            else -> print("none of the above")
        }

1、when替代Java中的switch,但是比Java中更加強大
2、上面的程式碼中有in(在範圍內),… 表示 [1,10] until:[1,10),這些後面詳細介紹

3、for

		for (i in 1..3) {
            println(i)
        }
        for (i in 1 until 3) {
            println(i)
        }
        for (i in 6 downTo 0 step 2) {
            println(i)
        }

        val list = arrayListOf<Int>()
        for (i in list){

        }
        val map = mapOf<String,String>()
        for ((key,value) in map){
        }

1、for迴圈提供了list、map等的遍歷
2、… 表示 [1,10]
3、until:[1,10)
4、downTo :減
5、step:步幅,例項中表示每次-2
6、對於map可以直接使用解構遍歷,解構的用法不僅僅用在遍歷,後面會詳細介紹。

4、while do…while return 等

這些基本和Java一樣,不在介紹。

5、基本型別

這些型別和Java基本一樣,但Kotlin沒有隱式轉換

1、數字型別Double、Float、Long、Int、Short、Byte

		 var a: Float = 1.0F
        //a = 1 //不可以隱式轉換,編譯報錯
        a = 1.0.toFloat() //可以顯示轉換
		
		var b = 123L //L 表示Long型別
        var c = 0x12 //16進位制
        var d = 1f
        var e = 1F //f、F表示Float

		var a1 = 1_000_000 //可以使用下劃線是數字更具可讀性

1、Kotlin 不支援8進位制
2、Kotlin 不可以隱式轉換
3、可以使用下劃線是數字更具可讀性

2、String

String最終常用的字串模版:

var s = "$key,${key.toUpperCase()}abc"

替換Java中String型別相加。
1、字串模版:${}
2、如果後面只有一個簡單的屬性名可以省略大括號

5訪問許可權修飾符 private、protected、internal、public

這些基本和Java一樣,不在介紹。

6 常用的集合

	var array :Array<String> = arrayOf()
    var array1 :IntArray = IntArray(10)
    var array2 :ArrayList<String> = arrayListOf()
    var map:Map<String,String> = mapOf<String,String>()
    var map1:HashMap<String,String> = hashMapOf()

1、注意初始化的方式比Java方便。

3 遇到不知道怎麼寫的怎麼辦?終極大法

先用java寫好,然後Code->Convert Java File to Kotlin File,轉過來後記住這種寫法,下次就會了。

我們寫好了Kotlin code後想看看Kotlin對應的Java寫法:
選中Kotlin檔案->Tools->Show Kotlin Bytecode:
在這裡插入圖片描述

點選Decompile:
在這裡插入圖片描述
這樣更加有助於我們學習。

Kotlin的學習資料:https://blog.csdn.net/mengks1987/article/details/78051857