1. 程式人生 > >Kotlin系統入門與進階(一)

Kotlin系統入門與進階(一)

一、什麼是Kotlin?

Kotlin就是一門可以執行在Java虛擬機器、Android、瀏覽器上的靜態語言,他與Java 100%相容,如果對Java熟悉,可以發現Kotlin擁有自己的標準庫之外,大都仍然使用經典的Java集合框架。
2016.2釋出正式版1.0
2016.9釋出1.0.4,支援apt

二、建立工程

先下載Intellij IDEA

file—>new—project:

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

三、Kotlin的資料型別

在Kotlin中已經不再區分裝箱和拆箱

這裡寫圖片描述

val aBoolean: Boolean = true
val anotherBoolean: Boolean = false

val anInt: Int = 8
val anotherInt: Int = 0xFF
val moreInt: Int = 0b00000011
val maxInt: Int = Int.MAX_VALUE
val minInt: Int = Int.MIN_VALUE

val aLong: Long = 12368172397127391
val another: Long = 123
val maxLong: Long = Long.MAX_VALUE
val
minLong: Long = Long.MIN_VALUE val aFloat: Float = 2.0F val anotherFloat: Float = 1E3f val maxFloat: Float = Float.MAX_VALUE val minFloat: Float = -Float.MAX_VALUE val aDouble: Double = 3.0 val anotherDouble: Double = 3.1415926 val maxDouble: Double= Double.MAX_VALUE val minDouble: Double= -Double.MAX_VALUE val
aShort: Short = 127 val maxShort: Short = Short.MAX_VALUE val minShort: Short = Short.MIN_VALUE val maxByte: Byte = Byte.MAX_VALUE val minByte: Byte = Byte.MIN_VALUE fun main(args: Array<String>) { println(anotherInt) println(moreInt) println(maxInt) println(Math.pow(2.0, 31.0) - 1) println(minInt) println( - Math.pow(2.0, 31.0)) println(maxLong) println(Math.pow(2.0, 63.0) - 1) println(minLong) println(- Math.pow(2.0, 63.0)) println(aFloat) println(anotherFloat) println(maxFloat) println(minFloat) println(maxDouble) println(minDouble) println(maxShort) println(minShort) println(maxByte) println(minByte) }

Char型別:

對應java中的Character

val aChar: Char = '0'
val bChar: Char = '中'
val cChar: Char = '\u000f'

fun main(args: Array<String>) {
    println(aChar)
    println(bChar)
    println(cChar)
}

String型別:

val arg1: Int = 0
val arg2: Int = 1
println("" + arg1 + " + " + arg2 + " = " + (arg1 + arg2))
println("$arg1 + $arg2 = ${arg1 + arg2}")

類與物件:

可以支援中文

class 妹子(性格: String, 長相: String, 聲音: String): 人(性格, 長相, 聲音)
class 帥哥(性格: String, 長相: String, 聲音: String): 人(性格, 長相, 聲音)

open class 人(var 性格: String, var 長相: String, var 聲音: String){
    //構造方法的方法體
    init {
        println("new 了一個${this.javaClass.simpleName}, ta性格:$性格, 長相:$長相, 聲音:$聲音")
    }
}

fun main(args: Array<String>) {
    val 我喜歡的妹子: 妹子 = 妹子("溫柔", "甜美", "動人")
    val 我膜拜的帥哥: 帥哥 = 帥哥("彪悍", "帥氣", "渾厚")
    println(我喜歡的妹子 is 人)
}

在Kotlin中,所有類的父類是Any這個類

空型別和智慧型別轉換:

在用Java時,我們需要判斷值是否為空

public class NullUnSafe {
    public static void main(String... args) {
        String name = getName();
        if(name == null){
            System.out.println("name is invalid!!");
        }else{
            System.out.println(name.length());
        }
    }

    public static String getName(){
        return "";
    }
}

但是在Kotlin時:

fun getName(): String?{
    return null
}

fun main(args: Array<String>) {
//當getName()返回null的時候執行return,使用?:符號
//    val name: String = getName() ?: return
//    println(name.length)

    //當我們已經知道value的值不為空,但是列印長度的時候,編譯器會報錯,原因是因為String後面加了?表示的是可空型別,解決辦法是在呼叫length方法時加兩個!!,告訴編譯器,此值肯定不為空
    val value: String? = "HelloWorld"
    println(value!!.length)
}

Child繼承Parent:
java的寫法:

public class TypeCast {
    public static void main(String... args) {
        Parent parent = new Child();
        System.out.println(((Child)parent).getName());

    }
}

Kotlin寫法:

fun main(args: Array<String>) {
    val parent: Parent = Parent()
    //如果parent能轉成Child則返回child,否則返回null
    val child: Child? = parent as? Child
    println(child)

    val string: String? = "Hello"
    if(string != null)
        println(string.length)
}

這裡寫圖片描述

區間(Range)

val range: IntRange = 0..1024 // [0, 1024]
val range_exclusive: IntRange = 0 until 1024 // [0, 1024) = [0, 1023]

val emptyRange: IntRange = 0..-1

fun main(args: Array<String>) {
    println(emptyRange.isEmpty())
    println(range.contains(50))
    println(50 in range)

    for(i in range_exclusive){
        print("$i, ")
    }
}

這裡寫圖片描述

陣列(Array)

val arrayOfInt: IntArray = intArrayOf(1,3,5,7)
val arrayOfChar: CharArray = charArrayOf('H', 'e','l','l','o','W','o','r','l','d')
val arrayOfString: Array<String> = arrayOf("我", "是", "碼農")
val arrayOf書記: Array<市委書記> = arrayOf(市委書記("章"), 市委書記("趙"), 市委書記("黃"))

fun main(args: Array<String>) {
    println(arrayOfInt.size)
    for(int in arrayOfInt){
        println(int)
    }

    println(arrayOf書記[1])
    arrayOf書記[1] = 市委書記("方")
    println(arrayOf書記[1])

    println(arrayOfChar.joinToString())
    println(arrayOfInt.slice(1..2))
}

這裡寫圖片描述
這裡寫圖片描述