Kotlin 入門
1、引入Kotlin
1、新專案引入
在新建專案的時候勾選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