中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Kotlin怎么進行編程

發布時間:2020-12-05 15:54:33 來源:億速云 閱讀:123 作者:Leah 欄目:移動開發

今天就跟大家聊聊有關使用Kotlin怎么進行編程,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

Kotlin 基本語法

先說個學習Kotlin語法的小竅門,將代碼用Java寫好,然后Code/Conver Java File to Kotlin File轉換成Kotlin代碼,或者將Java代碼復制到Kotlin文件會提示轉換也是挺方便的,比較差異很容易就能理解了,一開始難免不適應習慣后相信你一定會喜歡上Kotlin

1). 定義

忘掉Java的那一套寫法不然會很不適應的,Kotlin有自己的特性不該被Java的思維所束縛。在Kotlin中常量用val聲明,變了用var聲明,關鍵字在前面,類型以冒號:隔開在后面,也可以省略直接賦值,類型后帶問號?表示可為空類型(默認空安全)。
常量val延遲加載by lazy{},默認線程安全關閉線程安全lazy(LazyThreadSafetyMode.NONE){},變量var延遲加載lateinit。

//常量數組int[][][] arrs = new int[3][2][1];
val arrs = Array(3) { Array(2) { IntArray(1) } }
//空安全變量
var str: String = "hello"
//可為空字符串變量
var str1: String? = null

2). 條件

if...else 正常使用,不過移除了switch用更強大的when替代,when子式可以是各種返回Boolean的表達式

val x = 7
when (x) {
 in 1..10 -> print("x is in the range")
 in validNumbers -> print("x is valid")
 !in 10..20 -> print("x is outside the range")
 else -> print("none of the above")
}

3). 循環

while 和 do...while 同Java并無區別,for則有很大改變并多出了幾個變種

val list = ArrayList<String>()
//遞增for (int i = 0; i < list.size(); i++)
for (i in list.indices) {
  print(list[i])
}
//遞增for (int i = 2; i < list.size(); i++)
for (i in 2..list.size-1) {
  print(list[i])
}
//遞減for (int i = list.size(); i >= 0; i--)
for (i in list.size downTo 0) {
  print(list[i])
}
//操作列表內的對象
for (item in list) {
  print(item)
}
//加強版
for((i, item) in list.witnIndex()) {
  print(list[i])
  print(item)
}
//變種版
list.forEach {
  print(it)
}

list.forEach {
  print(it)
}

list.forEachIndexed { i, s ->
  print(list[i])
  print(s)
}

list.forEachIndexed(object :(Int,String) -> Unit{
  override fun invoke(i: Int, s: String) {
    print(list[i])
    print(s)
  }
})

萬能的冒號

在Kotlin中冒號:用萬能來稱呼絕不為過。常量變量的類型聲明,函數的返回值,類的繼承都需要它

//val表示常量var表示變量聲明
val name: String = "tutu" 
//省略類型說明
var age = "23"
//fun表示函數
fun getName(): String{
  return "tutu"
}
//類繼承
class UserList<E>(): ArrayList<E>() {
  //...
}

除此之外還有一個特別的地方也需要它,使用Java類的時候。Kotlin最終會還是編譯成Java字節碼,使用到Java類是必然的,在Kotlin語法如下

val intent = Intent(this, MainActivity::class.java)

類名::class.java沒有為什么就這么寫記著就是

我是誰的@

除了冒號另一個重要符號@,想必用到內部類和匿名內部類的地方一定很多,再加上支持lambda語法,沒有它誰告訴你this和return指的是哪一個

class User {
  inner class State{
    fun getUser(): User{
      //返回User
      return this@User
    }
    fun getState(): State{
      //返回State
      return this@State
    }
  }
}

偷懶的方法

1). Kotlin特色
Java的getter/setter方法自動轉換成屬性,對應到Kotlin屬性的調用

public class User {
  private String name;
  private String age;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getAge() {
    return age;
  }

  public void setAge(String age) {
    this.age = age;
  }
}

這樣一個Java類在Kotlin中只需這樣調用

val user = User()
//賦值
user.name = "tutu"
user.age = "23"
//取值
val name = user.name
val age = user.age

反之Kotlin的屬性自動生成Java的getter/setter方法,方便在Java中調用,同樣的定義在Kotlin中

class User {
  var name: String&#63; = null
  var age: String&#63; = null
}

我們的getter/setter方法有時不會這么簡單,這就需要自定義getter/setter了,另起一行設置get()/set(value)方法,實現一個Java中常用的單例,這里只為了展示,單例在Kotlin有更簡單的方法實現,只要在 package 級別創建一個 object 即可

class User {
  companion object {
    @Volatile var instance: User&#63; = null
      get() {
        if (field == null) {
          synchronized(User::class.java) {
            if (field == null)
              field = User()
          }
        }
        return field
      }
  }

  var name: String&#63; = null
  var age: String&#63; = null
}

自定義getter/setter重點在field,跟我們熟悉所Java的this指代當前類一樣,field指代當前參數,直接使用參數名instance代替不會報錯但單例就沒效果了

2). 字符串模板
在Java中拼接字符串的代碼可讀性都很差,在Kotlin字符串拼接變得非常簡潔,只需用$后面加上參數名,復雜的參數要加上{}

val user = User()
//賦值
user.name = "tutu"
user.age = "23"
//取值
val name = user.name
val age = user.age
var userInfo = "name:${user.name}, age:$age"
//輸出結果:name:tutu, age:23

3). lambda
一開始覺得lambda很高級完全看不懂,其實很簡單的就是把接口名、方法名和參數類型省掉不寫再加個->罷了,明白這點了就不介紹。

新面孔

1). 延遲加載
2). 流程控制

空判斷

Kotlin的空安全設計對于聲明可為空的參數,在使用時要進行空判斷處理,有兩種處理方式一種像Java一樣拋出空異常,字段后加!!,另一種不做處理直接跳過,字段后加&#63;

//類型后面加&#63;表示可為空
var age: String&#63; = "23" 
//拋出空指針異常
val ageInt = age!!.toInt()
//不做處理跳過
val ages = age&#63;.toInt()

注意事項

內部類和參數默認為public,而在Java中為private
類默認為不可繼承(final),想要可被繼承要聲明為open或abstract
取消了static關鍵字,靜態方法和參數統一寫在companion object塊
internal模塊內可見,inner內部類

看完上述內容,你們對使用Kotlin怎么進行編程有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沅江市| 千阳县| 麻栗坡县| 镇赉县| 仁怀市| 凭祥市| 泰和县| 突泉县| 新和县| 灵山县| 冀州市| 遵义市| 乌审旗| 乐安县| 博白县| 大埔区| 营口市| 鹿邑县| 平昌县| 乌拉特中旗| 江口县| 柘城县| 霍山县| 休宁县| 涟水县| 中阳县| 宜昌市| 济宁市| 民权县| 禄劝| 青海省| 嘉峪关市| 合川市| 陈巴尔虎旗| 广平县| 姚安县| 新昌县| 会理县| 安吉县| 仙桃市| 绿春县|