本篇含有大量的實戰練習,下面的數據類型,強烈建議你在IDE手動練習,請勿複製!!!
一、數據類型
在Android中使用Kotlin編寫的代碼會靠Java虛擬機,所以數據類型最終被編譯成爲Java數據類型。
1.Java的數據類型
Java語言的數據類型分爲:基本類型和引用類型。基本類型變量在計算機中保存的是數值,當賦值或作爲參數傳遞給函數時基本類型數據會創建一個副本,把副本賦值或傳遞給函數,這副本被改變不會影響原始數據。引用類型在計算機中保存的是指向數據的內存地址,即引用,當賦值或作爲參數傳遞給函數時引用類型數據會把引用賦值或傳遞給函數,事實上引用有多少個副本,都是指向相同的數據,通過任何一個引用修改數據,都會導致數據的變化。
1.1 Java基本數據類型
整數類型:byte、short、int、long,int是默認類型。
浮點類型:float和double,double是默認類型。
字符類型:char。
布爾類型:boolean。
2.Kotlin的基本數據類型
下面就是Kotlin的基本數據類型,基本和Java差不多,但是細心的同學會放下Kotlin的是大寫的,與Java不同。而且Kotlin沒有包裝類,它會隨着使用的場景自動的編譯爲Java的基本類型或者包裝類(很智能)
整數類型:Byte、Short、Int和Long,Int是默認類型。
浮點類型:Float和Double,Double是默認類型。
字符類型:Char。
布爾類型:Boolean。
val byte: Byte = 1 //byte類型
val short: Short = 1 //Short類型
val int: Int = 1 // Int類型
val long: Long = 1L //Long類型可以加L
//var long1:Long=1l //long類型只能加大寫L
val double: Double = 1.00 // Double類型
val float: Float = 1.0F // Float要加F或者f
val char: Char = 'c' //Char類型
val string: String = "王" //String類型
注意:在 Kotlin中Char不是數字
Java
private char aChar = 1; //編譯通過
Kotlin
var char:Char=1 //編譯錯誤
2.1kotlin數據類型的範圍
數據範圍,我也記不得了,你可點擊這裏查看
2.2 Kotlin隱式轉換
Kotlin 處理數字在某種程度上接近 Java,但是並不完全相同。例如,對於數字沒有隱式拓寬轉換(如 Java 中
int
可以隱式轉換爲long
),另外有些情況的字面值略有不同。
kotlin的隱式轉換只能在數學計算:
規律是這樣的:
首先同類型計算不變(Int+Int=Int) 沒有問題
2.2 Kotlin顯式轉換
fun main(args: Array<String>) {
var int: Int = 1
var byte: Byte = 1
int = byte //錯誤
int = byte.toInt() //正確
}
Kotlin的轉換使用to**,轉成什麼就to什麼,看栗子
栗子:
很簡單吧
3.Kotlin的可空類型
在Kotlin裏有一種類型叫可空類型,這也是Kotlin在預防空指針異常的優點。
在Kotlin只有可空類型纔可以接受空值!
栗子1
fun main(args: Array<String>) {
var string: String = null //編譯錯誤
var string1: String? = null //編譯正確
}
在Kotlin裏在類型後面加一個?就是可空類型。但是爲了安全可空類型不能直接賦值給非可空類型。
栗子2
var string: String
var string1: String? = null //編譯正確
string = string1 //錯誤
string1 = string //正確
栗子2很容易明白吧。
注意 可空類型在具體使用時會有一些限制:
不能直接調用可空類型對象的函數或屬性。
不能把可空類型數據賦值給非空類型變量。
不能把可空類型數據傳遞給非空類型參數的函數。
但是有時候我們要使用的場景要突破這些限制
安全調用運算符:?.
安全轉換運算符:as?
Elvis運算符:?:
非空斷言:!!
舉例子 非空斷言:
var int1: Int? = 1
var int2: Int? = 1
var int3: Int = int1 + int2 //編譯錯誤
var int4: Int = int1!! + int2!! //在值後面加上斷言,編譯通過
注意:斷言只有在你很確定的時候再使用,否則很可能引發空指針異常,還有一個注意點
你注意最後一行的到int1和int2的顏色不一樣了嗎?
這次我把int3和int4換行了,結果報錯了。想知道爲什麼嗎?
因爲斷言一旦編譯器知道了不爲空,下面在一定區域編譯器默認它不爲空了。什麼一定區域?多大?自己去試試吧!
Elvis運算符 栗子:
在網絡請求,有時候我們知道會返回空,但是我們又不想要null怎麼辦?
var string: String? = "wang"
var string1: String? = null
var string3: String = string1 ?: "wang" //此時string3=wang
安全調用運算符:?. 栗子:
var int1: Int? = null
var int2: Int = 1
var int3: Int? = int1?.plus(1)
println(int3)
這段代碼在Java中就拋異常了,因爲null+1.好好體會,哈哈。而結果是打印的null。
使用安全調用運算符我們的結果爲null時,只會返回結果爲null,而不會拋異常。
二、代碼規範
編程語言離不開代碼規範,爲什麼我要在這講代碼規範,因爲剛經過了一些練習,所以我想在這講一些簡單,而又重要的代碼規範。我也不仔細講了,幫你列出來吧!
- 變量名使用駝峯命名法
- 常量名全部大寫
-
重載佈局(就是重載的方法等放在一起,方便找到)
-
具體查看(太多了不想一一列出,但是請不要忽略,至少看看吧)
本節就到這裏了,希望你把之前的都掌握了
本文爲測試版,當這行字,沒有了就爲正式版