Kotlin系統入門與進階(一)
阿新 • • 發佈:2018-12-30
一、什麼是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))
}