kotlin-第一章 02:最基礎語法 03:Kotlin與java互調 04:新手常遇到的問題

02:最基礎語法

變量聲明
var age: Int = 18
var name: String = "liujia"

//如果變量聲明時有直接賦值,則可省略類型
var age2 = 18
var name2 = "liujia"

//kotlin空安全類型
var name3: String? = null

fun main(args: Array<String>) {
    name = name3//可空類型不可賦值給不可爲空類型
    name = name3!!//強轉,表示:確定name3不會爲空
    name3 = name //反過來可以,其是包含關係
}
函數聲明
fun printLen(str:String):String{
    println(str)
    println("這個字符串是:$str")//可在kotlin字符串中用$符合引入一個變量
    return str
}

03:Kotlin與java互調

java調kotlin

Test.kt文件中,聲明的所有函數,包括類型,變量最終都會編譯成這個類的public static方法或變量

//Test.kt
fun echo(name:String){
    println("$name")
}
//Main.java
public static void main(String[] args){
    TestKt.echo("張三");
}
特殊語法

以object關鍵字開頭,後面跟一個類的聲明,這種語法在kotlin中是創建一個匿名內部類的寫法。kotlin可以通過類名調用這個類的成員方法。

object Test {
    fun sayMessage(msg:String){
        println(msg)
    }
}
//kotlin調用
Test.sayMessage("張三")
//java調用
Test.INSTANCE.sayMessage("張三");

可以觀察到,在kotlin用object創建一個匿名內部類的時候,生成的java代碼會編譯成一個Test的類,Test中會創建一個INSTANCE的單例對象,並且構造方法會被改寫成private。
這是在kotlin中聲明單例的寫法。

kotlin中調用class
//java code
TestMain.class

//kotlin code
TestMain::class.java

fun main() {
    testJavaClass(JavaMain::class.java)
    testKotlinClass(KotlinMain::class)
}

fun testJavaClass(clazz: Class<JavaMain>){
    println(clazz.simpleName)
}

fun testKotlinClass(clazz: KClass<JavaMain>){
    println(clazz.simpleName)
}
kotlin調關鍵字方法
println(JavaMain.`in`)

04:新手常遇到的問題

1. kotlin沒有封裝類

java中的所有封裝類都會轉成kotlin的基本數據類型
1,如果java中有兩個同名函數,參數類型一個是int,一個是Integer。
2,kotlin中去調用的時候,會調參數爲int的那個函數。
3,如果在kotlin中想調用封裝類參數的函數,得用反射。

2. 空值敏感的問題

1,如果在java中有一個函數返回值可能爲空。
2,kotlin去接收這個函數自動推斷類型爲String!
3,這是kotlin的一個兼容類型,只會出現在kotlin調java的時候
4,如果用一個空安全類型去接收就不會有問題了

3. kotlin中沒有靜態變量和靜態方法

1,如果想在java中調用kotlin靜態方法但不想點出INSTANCE
2,可以在kotlin函數上加一個@JvmStatic註解
3,被@JvmStatic註解修飾的方法編譯後會變成public static方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章