Kotlin基礎(chǔ)寫法總結(jié)

總結(jié)一下基礎(chǔ)的寫法,方便自己快速的回顧猛铅。

一揖赴、 變量

在 Kotlin 中所有的變量都是不允許為 null 的。

空安全設(shè)計

但是實(shí)際場景是需要一些變量在聲明的時候初始值是 null滞欠。可以如下聲明:

class User{
  var name : String? = null
}

Kotlin中專業(yè)術(shù)語:可空類型 肆良。
可空類型變量調(diào)用之后會導(dǎo)致空指針異常筛璧,編譯器會不通過編譯。兩種避免這種情況的寫法:

  //第一種寫法, 編譯器會做一次非空確認(rèn)惹恃, safe call
  var view? = null
  view?.setBackgroundColor(Color.RED)

  //第二種寫法夭谤,堅(jiān)定變量絕對不為空,實(shí)際效果就和 Java 的一樣
  view !!.setBackgroundColor()

延遲初始化

顧名思義巫糙,直接看如何寫:

lateinit var view: View
override fun onCreate(...) {
    view = findViewById(...)
}

類型推斷

做為靜態(tài)語言的Kotlin朗儒,可以在寫變量的時候不用寫變量類型。

var name = "qhh"

val 和 var

var :可讀寫變量
val :只讀變量参淹,只能賦值一次醉锄。

二、函數(shù)

函數(shù)聲明

fun getAddress(name : String): String{
} 

無返回值的寫法:

fun setAddr(): Unit {}
//或者省略 Unit
fun setAddr(): {}

函數(shù)參數(shù)的注意點(diǎn)浙值。參考拋物線的總結(jié)

// ??可空變量傳給不可空參數(shù)恳不,報錯
var myName : String? = "rengwuxian"
fun cook(name: String) : Food {}
cook(myName)
  
// ??可空變量傳給可空參數(shù),正常運(yùn)行
var myName : String? = "rengwuxian"
fun cook(name: String?) : Food {}
cook(myName)
?
// ??不可空變量傳給不可空參數(shù)开呐,正常運(yùn)行
var myName : String = "rengwuxian"
fun cook(name: String) : Food {}
cook(myName)

getter / setter 函數(shù)

var name = "qhh"
      get(){
          return field + " 666"
      }
      set(value){
          field = " we " + value
      }

val name = "qhh"
      get(){
          return field + " 666"
      }

field 相當(dāng)于每個 var 中的內(nèi)部變量

三妆够、 類型

基本類型

Kotlin中基本類型和Java的相差不多。但是也是有區(qū)別的地方负蚊。
1神妹、Int類型裝箱
Kotlin裝箱時根據(jù)場景來決定。

var a: Int = 1 // unbox
var b: Int? = 2 // box
var list: List<Int> = listOf(1, 2) // box

裝箱的過程是耗費(fèi)性能的家妆,所以盡可能的使用不可空變量鸵荠。

2、數(shù)組的寫法區(qū)別
Kotlin中數(shù)組的寫法:(不裝箱)

var array: IntArray = intArrayOf(1, 2)

使用不可空變量和IntArray等數(shù)組類型伤极,都是不裝箱的

四蛹找、類和對象

類的構(gòu)造函數(shù)

1、主構(gòu)造函數(shù)
主構(gòu)造函數(shù)的書寫方式一:

class Student constructor(name: String)

constructor 可以省略哨坪,但是在有可見性修飾符修飾以及注解則不可以省略庸疾。
主構(gòu)造函數(shù)中的參數(shù),可以在 init 函數(shù)塊中進(jìn)行相關(guān)業(yè)務(wù)邏輯当编。

class Student constructor( name: String){
    
    val TAG = "Student"
    
    init {
        Log.d(TAG,"name is $name")    
    }
    
}

2届慈、次構(gòu)造函數(shù)

class Person {

    var firstName: String
    
    constructor(name: String){
        firstName = name
    }
    
}

3、構(gòu)造函數(shù)的委托機(jī)制
通過 this 實(shí)現(xiàn),有點(diǎn)類似 Java 中的 super

class Student constructor( name: String){

    var studentName = name
    var studentAge: Int = 0

    init {
        Log.d("qhh","name is $name")
    }
    
    constructor(age: Int,name: String) : this(name) {
        studentAge = age
    }

}

初始化代碼塊金顿,是主構(gòu)造函數(shù)的一部分臊泌,都會在次構(gòu)造函數(shù)之前執(zhí)行,不管有沒有主構(gòu)造函數(shù)都是如此揍拆。

類的繼承以及接口的實(shí)現(xiàn)方式

interface Impl {}

class MainActivity : AppCompatActivity(), Impl {}

Kotlin中類默認(rèn)都是 final 的渠概,不可繼承的。只有添加了 open 的類嫂拴,子類才可以繼承它播揪。

open class Parent {
    
    lateinit var mName: String
    
    open fun setName(name: String): Unit {
        println("setName = $name")
        mName = name
    }

    fun work(): Unit {
        
    }
}

子類中覆蓋父類的方法必須使用 override 。

class Children : Parent() {

    override fun setName(name: String) {
        super.setName(name)
        println("children name is $name")
    }

}

抽象 abstract 關(guān)鍵字筒狠,在Kotlin中同樣的保留猪狈。

abstract class Base {
    
    abstract fun base() : Unit
    
}

同樣,在 abstract 類中也可以沒有 abstract 函數(shù)窟蓝。

最終創(chuàng)建類的實(shí)例

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val student = Student("小明")

        val person = Person("老劉")

        val parent = Parent()
        parent.setName("大明")
        parent.work()

        val children = Children()
        children.setName("小黃")

        val derive = Derive()
        derive.base()
    }
}

類型轉(zhuǎn)化

同Java一樣罪裹,子類在實(shí)例的時候是可以賦值給父類變量饱普,反過來則不行运挫。

var parentNew: Parent = Children()

多態(tài)的特性同樣保存,并且轉(zhuǎn)為父類之后套耕,同樣是無法調(diào)用子類中的方法谁帕。這個就涉及到類型的強(qiáng)轉(zhuǎn)。Kotlin中使用到的是 is 和 as 兩個操作符冯袍。

if(parentNew is Children){
            parentNew.childWork("work 1")
        }

        (parentNew as Children).childWork("work 1")

as 配合 匈挖?同時使用,可以處理判斷類型轉(zhuǎn)換的安全問題康愤。

//表示 parentNew 是Children 類的父類或者是Children類儡循,則執(zhí)行childWork,如果不是則不執(zhí)行
(parentNew as? Children)?.childWork("11")

注意: parentNew as? Children 之后是一個可空類型的對象

總結(jié)

在學(xué)習(xí)了之后大致的一個基礎(chǔ)使用的總結(jié)征冷。學(xué)習(xí)過程中在看的是 Kotlin的官網(wǎng)教程择膝,以及 拋物線的網(wǎng)站。

參考:
https://www.kotlincn.net/
https://kaixue.io/kotlin-basic-1/?utm_source=androidweekly.io&utm_medium=website

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末检激,一起剝皮案震驚了整個濱河市肴捉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌叔收,老刑警劉巖齿穗,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異饺律,居然都是意外死亡窃页,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腮出,“玉大人帖鸦,你說我怎么就攤上這事∨叱埃” “怎么了作儿?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長馋劈。 經(jīng)常有香客問我攻锰,道長,這世上最難降的妖魔是什么妓雾? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任娶吞,我火速辦了婚禮,結(jié)果婚禮上械姻,老公的妹妹穿的比我還像新娘妒蛇。我一直安慰自己,他們只是感情好楷拳,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布绣夺。 她就那樣靜靜地躺著,像睡著了一般欢揖。 火紅的嫁衣襯著肌膚如雪陶耍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天她混,我揣著相機(jī)與錄音烈钞,去河邊找鬼。 笑死坤按,一個胖子當(dāng)著我的面吹牛毯欣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播臭脓,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼酗钞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谢鹊?” 一聲冷哼從身側(cè)響起算吩,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎佃扼,沒想到半個月后偎巢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兼耀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年压昼,在試婚紗的時候發(fā)現(xiàn)自己被綠了求冷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡窍霞,死狀恐怖匠题,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情但金,我是刑警寧澤韭山,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站冷溃,受9級特大地震影響钱磅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜似枕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一盖淡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凿歼,春花似錦褪迟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至攀唯,卻和暖如春洁桌,著一層夾襖步出監(jiān)牢的瞬間渴丸,已是汗流浹背侯嘀。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谱轨,地道東北人戒幔。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像土童,于是被迫代替她去往敵國和親诗茎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 社交社群成為目前營銷相對精準(zhǔn)的方式之一献汗。很多零售企業(yè)觀望已久敢订,躍躍欲試,但如何下手罢吃? 定位要清晰 零售企業(yè)楚午,根據(jù)不...
    新零售又一城閱讀 335評論 0 0
  • 有個學(xué)校的志愿者給災(zāi)區(qū)的孩子們講故事:從前,有個糧食倉庫里有許多老鼠尿招,它們每天要吃掉許多糧食矾柜。 村民們決定把它們趕...
    祝福您好閱讀 250評論 0 0
  • 《道德與武器》 在這個世界上阱驾,有著許多動物,有的食肉怪蔑,有的食草里覆。許多人總認(rèn)為食草動物是無辜弱小的,食肉動...
    黃翌閱讀 497評論 0 16
  • 有時候缆瓣,無奈被無限放大喧枷,卻不知為何。有時候弓坞,難受被無限擴(kuò)散割去,卻不知怎么。
    林夕雨鹿閱讀 89評論 0 0