[Kotlin]變量,函數(shù)和類型

1.Kotlin 變量沒(méi)有默認(rèn)值,需要初始化

var view:View   //報(bào)錯(cuò),需要初始化,否則就設(shè)置為抽象的
var view:View = null   //報(bào)錯(cuò),kotlin中需要做非空判斷
//怎么辦?
lateinit var view:View  //lateinit關(guān)鍵字表示,我第一時(shí)間無(wú)法給他初始化,但使用的時(shí)候肯定會(huì)初始化

2.kotlin中的空安全

var name: String? = null  //String?代表可以為空
//可空變量引發(fā)新的問(wèn)題
name.length   //假如name設(shè)置為可空,那么調(diào)用.length,就有報(bào)空指針異常的可能,kotlin會(huì)在編譯時(shí)就報(bào)錯(cuò)
//怎么解決呢?
if(null != name) {
    print(name.length)
}         //還是報(bào)錯(cuò),不讓使用,原因:  多線程情況下,其他線程可能在你檢查之后把name再改成空的
//怎么解決呢?
name?.length        name!!.length
  • 變量需要手動(dòng)初始化,所以不初始化會(huì)標(biāo)錯(cuò)
  • 變量默認(rèn)為非空,所以初始化時(shí)賦值為null也會(huì)報(bào)錯(cuò)
  • 變量使用 ? 設(shè)置為可空,使用時(shí)又報(bào)錯(cuò)
    所謂可空不可空,關(guān)注的是----使用時(shí)---- 這個(gè)變量在使用時(shí),是否可能為空

3.kotlin的類型推斷

Groovy:  動(dòng)態(tài)類型,是變量的類型能發(fā)生改變  
  var  args = "你好"  args = 0; 類型發(fā)生改變,但不報(bào)錯(cuò)
Kotlin: 類型推斷,根據(jù)值去推斷類型
var args = "你好"  arg  = 0      報(bào)錯(cuò)

4.變量的聲明,用var 和 val(只讀) 類似于java的final,但有區(qū)別
5.函數(shù)聲明方式

//如果沒(méi)有返回值,使用Unit,默認(rèn)不寫
fun test(arg1:Int,arg2:String?):String {
return "你好  "
}

6.int,float這些基本類型被Kotlin拋棄,在語(yǔ)言層面,Kotlin已經(jīng)沒(méi)有基本類型了,使用Int,Float
7.getter,setter

 val user = UserData()
    user.name = "Marry"      不管set,還是get,都直接 .變量名稱
    println(user.name)

class UserData : IMainActiity{
    var name:String = "Mike"
        get() {
            return field+"--nb"
        }
    set(value) {
        field = "Cute"+value
    }
}
  1. is as 關(guān)鍵字
 //利用多態(tài)的特性,創(chuàng)建的對(duì)象可以被對(duì)象事件的接口引用,但如果調(diào)用的方法不是接口中的方法,就需要判斷了
        //java:  a instanceof b
        //kotlin:  a is b          a  as  b
java中
Activity activity = new NewActivity();
    if (activity instanceof NewActivity) {
        ((NewActivity) activity).action();
    }

kotlin中
var iuser:IUser = UserData()
if(user is UserData) {
       user.sleep()
    }
//使用as進(jìn)行強(qiáng)轉(zhuǎn),而不進(jìn)行判斷
     Exception in thread "main" kotlin.TypeCastException: null cannot be cast to non-null type com.myself.learningkotlin.UserData
    (user as UserData).sleep()    --這種寫法如果強(qiáng)轉(zhuǎn)類型操作是正確的當(dāng)然沒(méi)問(wèn)題唁奢,但如果強(qiáng)轉(zhuǎn)成一個(gè)錯(cuò)誤的類型,程序就會(huì)拋出一個(gè)異常。
     

    (user as? UserData)?.sleep()   --如果強(qiáng)轉(zhuǎn)成功就執(zhí)行之后的調(diào)用魂仍,如果強(qiáng)轉(zhuǎn)不成功就不執(zhí)行。
    (user as? UserData?)?.sleep()  

9.open 關(guān)鍵字

kotlin中的類默認(rèn)是final修飾的,不可被繼承,如果想作為父類被繼承,就應(yīng)該使用open關(guān)鍵字
不想被繼承就使用final關(guān)鍵字
open class MainActivity {
}

10.override 的不同

  • Java 里面 @Override 是注解的形式愚战。
  • Kotlin 里的 override 變成了關(guān)鍵字春缕。
  • Kotlin 省略了 protected 關(guān)鍵字,也就是說(shuō)忌栅,Kotlin 里的 override 函數(shù)的可見(jiàn)性是繼承自父類的。

open 沒(méi)有父類到子類的遺傳性 父類使用open修飾,子類默認(rèn)還是final修飾
而剛才說(shuō)到的 override 是有遺傳性的 父類有個(gè)override fun eat() 子類也會(huì)默認(rèn)override fun eat() ,想要停掉這種遺傳,前面使用final

open class MainActivity : AppCompatActivity() {
    // ??加了 final 關(guān)鍵字曲稼,作用和 Java 里面一樣索绪,關(guān)閉了 override 的遺傳性
    final override fun onCreate(savedInstanceState: Bundle?) {
        ...
    }
}

11.創(chuàng)建一個(gè)新的對(duì)象

java中
User user = new User();
kotlin 中
var user:User = User()

12.不定量參數(shù)
使用關(guān)鍵字vararg

fun <T> asList(vararg ts: T): List<T> {
    val result = ArrayList<T>()
    for (t in ts) // ts 是一個(gè) Array
        result.add(t)
    return result
}

注意事項(xiàng):

  • 一個(gè)函數(shù)的所有參數(shù)中,只能有一個(gè)參數(shù)使用vararg修飾
    在java中不定量參數(shù)必須是參數(shù)的最后一個(gè),但kotlin中不用這樣,如果后面還有參數(shù),需要使用具名參數(shù)來(lái)表示.如果是一個(gè)類參數(shù),可以使用lambda來(lái)表示
fun main(args: Array<String>) {

    fruit("apple", "banana", address = "Minhang")

}

fun fruit(vararg fruits: String, address: String) {
    for (fruit in fruits) {
        println("fruit:$fruit, from address: $addr")
    }
}

// Log
fruit:apple, from address: Minhang
fruit:banana, from address: Minhang

  • 我們調(diào)用vararg函數(shù)時(shí),我們可以一個(gè)接一個(gè)地傳參贫悄,例如 asList(1, 2, 3)瑞驱,或者,如果我們已經(jīng)有一個(gè)數(shù)組并希望將其內(nèi)容傳給該函數(shù)窄坦,我們使用伸展spread操作符(在數(shù)組前面加 *):
val a = arrayOf(1, 2, 3)
val list = asList(-1, 0, *a, 4)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末唤反,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鸭津,更是在濱河造成了極大的恐慌彤侍,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,331評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逆趋,死亡現(xiàn)場(chǎng)離奇詭異盏阶,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)闻书,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門名斟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人魄眉,你說(shuō)我怎么就攤上這事砰盐。” “怎么了坑律?”我有些...
    開封第一講書人閱讀 167,755評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵岩梳,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蒋腮,這世上最難降的妖魔是什么淘捡? 我笑而不...
    開封第一講書人閱讀 59,528評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮池摧,結(jié)果婚禮上焦除,老公的妹妹穿的比我還像新娘。我一直安慰自己作彤,他們只是感情好膘魄,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,526評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著竭讳,像睡著了一般创葡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绢慢,一...
    開封第一講書人閱讀 52,166評(píng)論 1 308
  • 那天灿渴,我揣著相機(jī)與錄音,去河邊找鬼胰舆。 笑死骚露,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的缚窿。 我是一名探鬼主播棘幸,決...
    沈念sama閱讀 40,768評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼倦零!你這毒婦竟也來(lái)了误续?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,664評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤扫茅,失蹤者是張志新(化名)和其女友劉穎蹋嵌,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體葫隙,經(jīng)...
    沈念sama閱讀 46,205評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡栽烂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,290評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了停蕉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,435評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钙态,死狀恐怖慧起,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情册倒,我是刑警寧澤蚓挤,帶...
    沈念sama閱讀 36,126評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響灿意,放射性物質(zhì)發(fā)生泄漏估灿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,804評(píng)論 3 333
  • 文/蒙蒙 一缤剧、第九天 我趴在偏房一處隱蔽的房頂上張望馅袁。 院中可真熱鬧,春花似錦荒辕、人聲如沸汗销。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)弛针。三九已至,卻和暖如春李皇,著一層夾襖步出監(jiān)牢的瞬間削茁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工掉房, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留茧跋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,818評(píng)論 3 376
  • 正文 我出身青樓圃阳,卻偏偏與公主長(zhǎng)得像厌衔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捍岳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,442評(píng)論 2 359