Kotlin學(xué)習(xí)---基礎(chǔ)

現(xiàn)在google已經(jīng)將Kotlin列為第一語言,kotlin是一種可以與android兼容的語言,他不僅語法簡介碎罚,更具表達性,還具備類型安全和空值安全的特性纳像【A遥可以與java無縫互通。

今天我們就開始學(xué)習(xí)kotlin了,該系列內(nèi)容都是筆者學(xué)習(xí)時的筆記憔购,僅供學(xué)習(xí)使用宫峦。

一、變量聲明

說明:

  1) 格式:val/var + 變量名稱 :類型 = 初始值

  2)val 定義的是常量   只讀    final int value = 12;

  3)var 可讀可寫     相當(dāng)于java中的String info = "String";
var info = "String"
val value = 12

二玫鸟、函數(shù)(可變參數(shù)函數(shù)导绷、匿名函數(shù),高階函數(shù))

說明:

  1) 格式:fun   函數(shù)名(參數(shù)列表):返回值類型 { 函數(shù)體 }

  2) 使用vararg 可變長參數(shù)來完成類似java中的可變參數(shù)

  3) 匿名函數(shù):沒有函數(shù)名屎飘,直接通過輸入和輸出更直接的進行標(biāo)識

  4)高階函數(shù):一個函數(shù)可以將另外一個函數(shù)作為參數(shù)妥曲,將其他函數(shù)用作參數(shù)的函數(shù)就是高階函數(shù)(類似于java中的額回調(diào)接口)
//普通函數(shù)
fun add(number: Double, number2: Double): Double {
    return number + number2
}

//類型推導(dǎo)返回類型
fun add(number1: Int, number2: Int) = number1 + number2

//可變長參數(shù)
fun add(vararg value: Int) {
    for (i in value) {
        println(i)
    }
}


//lambda 表達式  add代表對匿名函數(shù)的引用,(Int ,Int)是輸入?yún)?shù)  ->Int 是輸出的返回值 {}是真正的函數(shù)體的實現(xiàn)
var add: (Int, Int) -> Int = { number1, number2 -> number1 + number2 }


//高階函數(shù)
fun highLevelFun(number: Int, add: (number1: Int) -> Int): Int {
    return add(number)
}

三钦购、字符串模板

說明:

  1檐盟、$ 變量名

  2、自動換行用 """ """ 三組雙引號打印   使用trimIndent()去掉空格  使用triMargin()來去掉字符串中的某個字符
fun printDemo() {
    println("字符串模板輸出:")
    var name = "張三"
    var age = 28
    println("name=$name,age = $age")

    var info = """
        hello
        world
    """.trimIndent()
    println(info)
}

四押桃、NULL空檢查機制

說明:

1葵萎、在聲明變量時使用? 代表通知所有在使用此變量時需要注意,這個變量可能為空,

補救措施:

1)在使用時加上? 代表為空時則不執(zhí)行

2)使用兩個!!唱凯,來表示此變量不為空羡忘,如果為空時會報出空指針異常

3)類似于java進行非空的判斷

4)使用 ?: 運算符來處理為null時的情況

fun emptyCheckDemo() {
    println("null 空檢查機制")
    var info: String? = null

    var len = info?.length ?: 0
    println(info?.length)
}

五、區(qū)間

1磕昼、in 在for循環(huán)中執(zhí)行區(qū)間操作 ..代表區(qū)間范圍(從小到大)卷雕;downTo 從小到大

2、使用step 來進行跳躍式訪問

3票从、until 排除最后元素的訪問

fun inAreaDemo() {
    println("區(qū)間輸出:")
    for (i in 1..10) {
        println(i)
    }
    println("-----------")
    for (i in 10 downTo 1) {
        println(i)
    }

    println("-----------")
    for (i in 1 until 10) {
        println(i)
    }
}

六爽蝴、比較

1、== 來比較兩個對象的值

2纫骑、=== 來比較兩個對象的地址

fun compareDemo() {
    var number: Int = 1000
    var number1: Int = 1000
    println(number == number1)
    println(number === number1)
}

七、條件判斷

1九孩、 if else 與java中的基本相同先馆,只是每一個條件的最后一句執(zhí)行結(jié)果是作為if else 的滿足條件返回值

2、 when 相當(dāng)于java中的switch , 但是when 是可以有返回值的躺彬,且when的條件可以是任意的類型或表達式,且可以是區(qū)間;

    如果要接受when的返回值煤墙,則必須在when的條件最后加else 來完成返回值

  如果返回值數(shù)據(jù)類型不相同,可以使用Any?來修飾接受結(jié)果的變量宪拥,相當(dāng)于java中的Object
fun judgeDemo() {
    println("條件判斷")
    var number = 100
    var ifResult = if (number == 100)
        "true"
    else
        "false"
    println(ifResult)

    var result: Any? = when (number) {
        0 -> "0"
        100 -> "100"
        in 100..200 -> "200"
        else -> 'M'
    }
    println(number)
}

八仿野、循環(huán)和標(biāo)簽

1、標(biāo)簽:標(biāo)簽名@ 做一個標(biāo)記她君,相當(dāng)于goto

2脚作、for in foreach 來完成循環(huán)

fun cycleAndTagDemo() {
    tag@ for (j in 1..20) {
        for (i in 1..100) {
            if (i == 50) {
                break@tag//結(jié)束外層循環(huán)
            }
        }
    }
}

九、類

1、類與java的類相同球涛,只是類的屬性默認是public 劣针,可以通過對象直接訪問,需要顯式聲明為private

2亿扁、在類的對象初始化時必須對屬性進行初始化捺典,這樣你可以在得到示例時立即訪問他的屬性

3、也可以使用lateinit來推遲屬性的初始化

4从祝、伴生對象:用于定義在概念上與某個類型相關(guān)襟己,但不與其特點對象關(guān)聯(lián)的變量或函數(shù)。

    說白了: 類似于java中的static修飾的變量和方法

5牍陌、主次構(gòu)造:次構(gòu)造必須調(diào)用主構(gòu)造

6擎浴、kotlin中的類默認是public final 修飾的,不能被繼承呐赡,需要加上 open 修飾后才可以繼承

7退客、kotlin 所有的對象都是沒有默認值的,可以使用lateinit 來進行懶加載初始化链嘀,lateinit只能修飾var的變量

8萌狂、內(nèi)部類必須加上inner ,否則只是嵌套類

open class Car(id: Int)//主構(gòu)造
{
    var name: String = ""
    var age: Int = 0

    //在初始化塊中進行初始化屬性
    init {
        name = "leon"
        age = 18
    }

    //    伴生對象
    companion object {
        val TAG: String = "Person"

    }

    //次構(gòu)造, 也可以重載
    constructor(id: Int, name: String) : this(id) {
        this.name = name
    }

    //內(nèi)部類怀泊,可以訪問外部類成員
    inner class Wheel {
        fun show() {
            println(name)
        }
    }

    //外部類茫藏,不以訪問外部類成員
    class Light {
        fun show() {
//            println(name)
        }
    }
}

class pCar(id: Int) : Car(id) {

}

十、抽象類與接口霹琼、data,object

1务傲、所有的接口默認都是open

2、在類實現(xiàn)接口的時候枣申,接口后面不需要加()括號售葡,多個接口實現(xiàn)時需要用逗號隔開

3、在類與接口的實現(xiàn)類中忠藤,將類的繼承放在前面

4挟伙、data 修飾的class 其實類似于java中的實體bean,會自動生成很多java的方法

5模孩、object 修飾的尖阔,相當(dāng)于單例,只實例化一次

//接口
interface ICallBack {
    fun notify(message: String);
}

//抽象類
abstract class Person : ICallBack {
    abstract fun updateName(name: String)
    abstract fun updateAge(age: Int)
}

//實現(xiàn)類
class Student : Person() {
    override fun updateName(name: String) {
        TODO("Not yet implemented")
    }

    override fun updateAge(age: Int) {
        TODO("Not yet implemented")
    }

    override fun notify(message: String) {
        TODO("Not yet implemented")
    }
}


//數(shù)據(jù)bean
data class HttpResultBean(val code: String, val msg: String, val result: Any)


class NetManager {

    //單例
    object Holder {
        val instance = NetManager()
    }

    //伴生對象榨咐,靜態(tài)區(qū)
    companion object {
        fun getInstance(): NetManager = Holder.instance
    }

    fun show(mes: String) {
        println(mes)
    }

}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末介却,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子块茁,更是在濱河造成了極大的恐慌齿坷,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異胃夏,居然都是意外死亡轴或,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門仰禀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來照雁,“玉大人,你說我怎么就攤上這事答恶〗任茫” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵悬嗓,是天一觀的道長污呼。 經(jīng)常有香客問我,道長包竹,這世上最難降的妖魔是什么燕酷? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮周瞎,結(jié)果婚禮上苗缩,老公的妹妹穿的比我還像新娘。我一直安慰自己声诸,他們只是感情好酱讶,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著彼乌,像睡著了一般泻肯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上慰照,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天灶挟,我揣著相機與錄音,去河邊找鬼毒租。 笑死膏萧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蝌衔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼蝌蹂,長吁一口氣:“原來是場噩夢啊……” “哼噩斟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起孤个,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤剃允,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斥废,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡椒楣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了牡肉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捧灰。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖统锤,靈堂內(nèi)的尸體忽然破棺而出毛俏,到底是詐尸還是另有隱情,我是刑警寧澤饲窿,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布煌寇,位于F島的核電站,受9級特大地震影響逾雄,放射性物質(zhì)發(fā)生泄漏阀溶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一鸦泳、第九天 我趴在偏房一處隱蔽的房頂上張望银锻。 院中可真熱鬧,春花似錦辽故、人聲如沸徒仓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掉弛。三九已至,卻和暖如春喂走,著一層夾襖步出監(jiān)牢的瞬間殃饿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工芋肠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留乎芳,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓帖池,卻偏偏與公主長得像奈惑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子睡汹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

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