kotlin学习之基础(一)
生活随笔
收集整理的這篇文章主要介紹了
kotlin学习之基础(一)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 1. 基礎
- val和var
- 支持數字字面加下劃線
- 自動裝箱
- 注意比較
- 類型轉換
- 位運算
- 數組
- map
- 2. 控制流
- if
- for
- when
- 3. 異常
這一節主要介紹Kotlin基礎部分,與Java有區別的地方。介紹一些基礎,控制流和異常內容。
1. 基礎
val和var
var指向可變引用
val指向一個不可變的引用,但是如果這個引用是可變的
val languages = array("Java","C++"); //languages = array("Java","C++") //錯誤 languages.add("kotlin") //正確支持數字字面加下劃線
val oneMillion = 1_000_000 val creditCardNumber = 1234_5678_9012_3456L val socialSecurityNumber = 999_99_9999L自動裝箱
val a: Int = 10000 //a是基礎類型 val b: Int? = 10000//b是裝箱猴的包裝類型注意比較
注意比較(equals(),==\,=\==)kotlin的==類似但是不等于equal(),等于a?.equal(b)?:b==null,這樣就不用考慮空指針的問題,但是與equals()比較類似,就不用equals()單獨拿出來對比。
==可以理解為數值上的相等,===理解地址的相等
// 基礎類型與基礎類型的對比 val a : Int = 10000 val b : Int = 10000 println(a == b) println(a === b) // 基礎類型與包裝類型的對比 val a : Int = 10000 val b : Int?= 10000 println(a == b) println(a === b) // 包裝與包裝類型的對比 val a : Int? = 10000 val b : Int? = 10000 println(a == b) println(a === b) // true true true false true false// 將一個基礎類型裝箱不能保證同一性但不能保證相等性 val a : Int = 10000 val b : Int? = a val c : Int? = a println(b == c) println(b === c) // true false// kotlin跟java一樣會緩存-128-127之間的int包裝類型 val a : Int = 127 val b : Int? = a val c : Int? = a println(b == c) println(b === c) // true true類型轉換
Java的基礎類型是可以由小類型轉大類型的,而Kotlin不行,更別說包裝類型了
val b: Byte = 1 // OK val i: Int = b // 錯誤val b: Byte? = 1 // OK val i: Int? = b // 錯誤// 如果需要顯示轉換,要拓寬數據 val i: Int = b.toInt() // 顯式拓寬 print(i)位運算
不支持直接使用位運算,需要調用對應函數
shl(bits) – 有符號左移 (Java 的 <<) shr(bits) – 有符號右移 (Java 的 >>) ushr(bits) – 無符號右移 (Java 的 >>>) and(bits) – 位與 or(bits) – 位或 xor(bits) – 位異或 inv() – 位非數組
可以理解Kotlin把數組整合成了一個類Array,這個類具有size屬性、get、set方法,它的創建函數是:
arrayOf(1,2,3) // 直接傳遞元素 arrayOfNulls() //元素為空的數組// 創建一個 Array<String> 初始化為 ["0", "1", "4", "9", "16"],中括號的參數是索引 val asc = Array(5) { i -> (i * i).toString() }for (item in collection) { print(item) }遍歷查看下面的for循環
map
val airports= mapOf<String ,String>(Pair("PVG","浦東"),Pair("SHA","虹橋"),Pair("HGH","蕭山"))println(airports.size)println(airports["PVG"])for((add,where) in airports){println("$add = $where")}2 .控制流
if
if not null 寫成 printf(files?.size) if not null and else 寫成 println(files?.size?:"empty") if null 寫法 val email = values["email"] ?: throw IllegalStateException("Email is miss")for
//遍歷元素 for (item in collection) { print(item) }//遍歷索引,(更加智能的方案) for (index in 0..viewGroup.getChildCount() - 1) { val view = viewGroup.getChildAt(index) view.visibility = View.VISIBLE }//在我們迭代一個a數組或集合,indices直接獲得索引范圍 for (i in array.indices) print(array[i])when
when表達式與Java中的switch/case類似,但是要強大得多。
這個表達式會去 試圖匹配所有可能的分支直到找到滿意的一項,然后它會運行右邊的表達式,可以增加else分支匹配無分支匹配的情況。
3. 異常
Kotlin不區分受檢異常和非受檢異常,通常在catch中返回值而不是拋出錯誤。try/catch可以作為一個表達式。
//java public class TryCatchAndFinally {public static void main(String[] args){BufferedReader bufferedReader = new BufferedReader(new StringReader("234"));try {System.out.println(readNumber(bufferedReader));} catch (IOException e) {e.printStackTrace();}}public static int readNumber(BufferedReader reader) throws IOException {try {String readLine = reader.readLine();return Integer.parseInt(readLine);} catch (NumberFormatException e) {return -1; //不是數字,返回-1}finally {reader.close();}} } //kotlin fun readNumber(reader: BufferedReader){val number = try {Integer.parseInt(reader.readLine())}catch (e: NumberFormatException){null}println(number) }fun main(args: Array<String>) {val bufferedReader = BufferedReader(StringReader("not a number"))readNumber(bufferedReader) }總結
以上是生活随笔為你收集整理的kotlin学习之基础(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓学习 之 网络技术(十)
- 下一篇: kotlin学习之函数(二)