日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

kotlin学习之基础(一)

發布時間:2024/2/28 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kotlin学习之基础(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 1. 基礎
    • val和var
    • 支持數字字面加下劃線
    • 自動裝箱
    • 注意比較
    • 類型轉換
    • 位運算
    • 數組
    • map
  • 2. 控制流
    • if
    • for
    • when
  • 3. 異常

這一節主要介紹Kotlin基礎部分,與Java有區別的地方。介紹一些基礎,控制流和異常內容。

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循環

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")} 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 (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表達式與Java中的switch/case類似,但是要強大得多。

這個表達式會去 試圖匹配所有可能的分支直到找到滿意的一項,然后它會運行右邊的表達式,可以增加else分支匹配無分支匹配的情況。

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学习之基础(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。