學(xué)習(xí)筆記-01

Kotlin 學(xué)習(xí)筆記
原視頻資料地址

你好世界

fun main(args: Array<String>) {
    println("Hello, Kotlin!")
}

數(shù)據(jù)類型

數(shù)據(jù)類型

數(shù)據(jù)類型
fun main(args: Array<String>) {
    val aByte:Byte=Byte.MAX_VALUE
    val bByte:Byte=Byte.MIN_VALUE
    println("MAX_VALUE is $aByte, MIN_VALUE is $bByte")
    
    val aInt:Int = 0b011 // 二進(jìn)制
    println("aInt is $aInt")
}

輸出

MAX_VALUE is 127, MIN_VALUE is -128
aInt is 3

初識(shí)函數(shù)

fun main(args: Array<String>) {
    printOneStar()
    printThreeStars()
    printFiveStars()
    println("*******")
    printFiveStars()
    printThreeStars()
    printOneStar()
}

fun printOneStar() {
    println("   *   ")
}

fun printThreeStars() {
    println("  ***  ")
}

fun printFiveStars() {
    println(" ***** ")
}

輸出

   *   
  ***  
 ***** 
*******
 ***** 
  ***  
   *  

Boolean

fun main(args: Array<String>) {
    val num1 = Math.sqrt(5.0) - Math.sqrt(4.0)
    val num2 = Math.sqrt(4.0) - Math.sqrt(3.0)
    println(num1 > num2)
    
    val num3 = Math.pow(2.0, 100.0)
    val num4 = Math.pow(3.0, 75.0)
    println(num3 > num4)
}

輸出

false
false

函數(shù)作業(yè)練習(xí)

fun sayHello(name: String) = "Hello $name"

fun checkAge(age: Int) = age > 18

fun saveLog(logLevel: Int) {}

fun main(args: Array<String>) {
    println(sayHello("Leo"))
    println(checkAge(2))
    saveLog(1)
}

輸出

Hello Leo
false

字符串

fun main(args: Array<String>) {
    val template = """
        |今天
        |明天
        """.trimMargin("|")
    println(template)
    
    val template2 = "今天\n明天"
    println(template2)
}

輸出

今天
明天
今天
明天
字符串比較
fun main(args: Array<String>) {
    var str1 = "123"
    var str2 = "123"
    println(str1 == str2)
    println(str1.equals(str2))
    str1 = "ABC"
    str2 = "abc"
    println()
    println(str1 == str2)
    println(str1.equals(str2))
    println(str1.equals(str2, true)) // ignoreCase: true
}

輸出

true
true

false
false
true

空值處理

fun main(args: Array<String>) {
    println(heat("水"))
    println(heat(null))
}

fun heat(str: String?): String {
    return if (str == null) "不加熱" else "加熱$str"
}

輸出

加熱水
不加熱

When表達(dá)式

fun gradeStudent(score: Int) = when(score) {
    10 -> println("Great")
    9 -> println("Nice")
    8 -> println("Better")
    7 -> println("Fine")
    6 -> println("Ok")
    else -> println("Bad")
}

fun main(args: Array<String>) {
    gradeStudent(7)
}

輸出

Fine

循環(huán)和范圍

fun main(args: Array<String>) {
    val nums = 1..100 // [1, 100]
    nums.map { it -> println(it) }
    val nums2 = 1 until 100 // [1, 100)
    nums2.map { it -> println(it) }
    val nums3 = 1..100 step 2
    nums3.map { println(it) }
    nums3.reversed().map { println(it) }
    println("total: ${nums3.count()}")
    val nums4 = 100 downTo 1
    nums4.map { println(it) }
}

List

fun main(args: Array<String>) {
    val lists = listOf("a", "b", "c", "d")
    lists.map { println(it) }
    for ((i, e) in lists.withIndex()) {
        println("$i is $e")
    }
}

輸出

a
b
c
d
0 is a
1 is b
2 is c
3 is d

Map

import java.util.*

fun main(args: Array<String>) {
    val map = TreeMap<String, String>()
    map["1"] = "good"
    map["2"] = "better"
    println(map["2"])
    val map2 = mapOf("1" to "good", "2" to "better")
    println(map2["1"])
}

輸出

better
good

函數(shù)表達(dá)式

fun main(args: Array<String>) {
    val i = { x: Int, y: Int -> x + y }
    println(i(3, 5))
    println(add(4, 5))
    val j: (Int, Int) -> Int = { x, y -> x + y }
    println(j(4, 5))
}

fun add(x: Int, y: Int) = x + y

輸出

8
9
9

默認(rèn)參數(shù)和具名參數(shù)

import kotlin.math.PI

fun getCirclePerimeter(pi: Double = PI,radius: Double) = 2 * pi * radius

fun getCirclePerimeter2(pi: Double = PI, diameter:Double) = pi * diameter

fun main(args: Array<String>) {
    println(getCirclePerimeter(radius = 2.0))
    println(getCirclePerimeter2(diameter = 4.0))
}

輸出

12.566370614359172
12.566370614359172

字符串和數(shù)字之間的轉(zhuǎn)換

fun main(args: Array<String>) {
    var a = "13"
    var b = 13
    a = b.toString()
    b = a.toInt()
    var c = "${a}3"
    b = c.toInt()
    println(b)
}

輸出

133

人機(jī)交互-打字交互

fun main(args: Array<String>) {
    println("First NUM:")
    val num1str = readLine()
    println("Second NUM:")
    val num2str = readLine()
    val num1 = num1str!!.toInt()
    val num2 = num2str!!.toInt()
    println("$num1 + $num2 = ${num1 + num2}")
}

輸出

First NUM:
12
Second NUM:
13
12 + 13 = 25

異常處理

fun main(args: Array<String>) {
    println("First NUM:")
    val num1str = readLine()
    println("Second NUM:")
    val num2str = readLine()
    try {
        val num1 = num1str!!.toInt()
        val num2 = num2str!!.toInt()
        println("$num1 + $num2 = ${num1 + num2}")
    } catch (e: NumberFormatException) {
        println("Wrong Number Type")
    }
}

輸出

First NUM:
a
Second NUM:
b
Wrong Number Type

遞歸

fun main(args: Array<String>) {
    println(fact(6))
}

fun fact(num: Int): Int = if (num == 1) 1 else num * fact(num - 1)

輸出

720

BigInteger改寫(xiě)

import java.math.BigInteger

fun main(args: Array<String>) {
    println(fact(BigInteger("100")))
}

fun fact(num: BigInteger): BigInteger = if (num == BigInteger.ONE) BigInteger.ONE else num * fact(num - BigInteger.ONE)

輸出

93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

尾遞歸優(yōu)化

fun main(args: Array<String>) {
    println(tailrecAdd(100, 0))
}

tailrec fun tailrecAdd(num: Int, result: Int): Int = if (num == 0) result else tailrecAdd(num - 1, result + num)

輸出

5050

初識(shí)面向?qū)ο?/h4>
class Rect(val height: Int, val width: Int)

fun main(args: Array<String>) {
    val rect = Rect(10, 20)
    println("Height is ${rect.height}")
    println("Width is ${rect.width}")
}

輸出

Height is 10
Width is 20

靜態(tài)屬性和動(dòng)態(tài)行為

class Girl(val character: String, val voice: String) {
    private fun smile() {
        println("Smile")
    }
    
    fun laugh() {
        smile()
        println("Ha Ha")
    }
}

fun main(args: Array<String>) {
    val girl = Girl("Good", "Great")
    girl.laugh()
}

輸出

Smile
Ha Ha

洗衣機(jī)實(shí)例

class WashMachine(val module: String, var size: Int) {
    private var isDoorOpen = false
    fun openDoor() {
        isDoorOpen = true
        println("Door is opened.")
    }
    
    fun closeDoor() {
        isDoorOpen = false
        println("Door is closed.")
    }
    
    fun start() {
        if (isDoorOpen) {
            println("Close the door first, please.")
        } else {
            println("Start working.")
        }
    }
}

fun main(args: Array<String>) {
    var machine01 = WashMachine("小天鵝", 10)
    machine01.openDoor()
    machine01.start()
    machine01.closeDoor()
    machine01.start()
}

輸出

Door is opened.
Close the door first, please.
Door is closed.
Start working.

封裝

private關(guān)鍵字

繼承

Father.kt

open class Father {
    var character: String = "內(nèi)向"
    open fun action() {
        println("公共場(chǎng)合大聲喧嘩")
    }
}

Son.kt

class Son : Father() {
    override fun action() {
        println("公共場(chǎng)合很有禮貌")
    }
}

Test.kt

fun main(args: Array<String>) {
    val son1 = Son()
    println("The character is ${son1.character}")
    son1.action()
}

輸出

The character is 內(nèi)向
公共場(chǎng)合很有禮貌

抽象類和繼承

Human.kt

abstract class Human(var name: String) {
    abstract fun eat()
}

Man.kt

class Man(name: String) : Human(name) {
    override fun eat() {
        println("$name 大口吃")
    }
}

'Woman.kt`

class Woman(name: String) : Human(name) {
    override fun eat() {
        println("$name 小口吃")
    }
}

Test.kt

fun main(args: Array<String>) {
    val man = Man("Maximus")
    val woman = Woman("Ivy")
    man.eat()
    woman.eat()
}

輸出

Maximus 大口吃
Ivy 小口吃

抽象類和接口

  • 接口是事物的能力
  • 抽象類是事物的本質(zhì)
    Human.kt
abstract class Human(var name: String) {
    abstract fun eat()
}

InterfaceMan.kt

interface InterfaceMan {
    fun action()
}

Test.kt

class PersonMan(name: String) : Human(name), InterfaceMan {
    override fun eat() {
        println("${name}大口吃飯")
    }
    
    override fun action() {
        println("${name}長(zhǎng)胡子")
    }
    
}

fun main(args: Array<String>) {
    val person = PersonMan("Maximus")
    person.eat()
    person.action()
}

輸出

Maximus大口吃飯
Maximus長(zhǎng)胡子

區(qū)別:抽象類是事物的本質(zhì),是一類事物都具備的東西;接口是事物的能力,只有一類中的一部分事物才具備這種能力庆揩。

委托和代理

by關(guān)鍵字
IWashBowl.kt

interface IWashBowl {
    fun washing()
}

BigHeadSon.kt

class BigHeadSon : IWashBowl {
    override fun washing() {
        println("我是大頭兒子孙乖,我在開(kāi)心得洗碗绳泉,一次一塊錢(qián)")
    }
}

SmallHeadFather.kt

class SmallHeadFather : IWashBowl by BigHeadSon()

Test.kt

fun main(args: Array<String>) {
    val fa = SmallHeadFather()
    fa.washing()
}

輸出

我是大頭兒子范舀,我在開(kāi)心得洗碗,一次一塊錢(qián)

單例模式

IWashBowl.kt

interface IWashBowl {
    fun washing()
}

BigHeadSon.kt

object BigHeadSon : IWashBowl {
    override fun washing() {
        println("我是大頭兒子厨诸,我在開(kāi)心得洗碗,一次一塊錢(qián)")
    }
}

SmallHeadFather.kt

class SmallHeadFather : IWashBowl by BigHeadSon { // 注意區(qū)別禾酱,沒(méi)有括號(hào)
    override fun washing() {
        println("我是小頭爸爸微酬,我讓我兒子洗碗")
        BigHeadSon.washing() // 區(qū)別,沒(méi)有括號(hào)
    }
}

Test.kt

fun main(args: Array<String>) {
    val fa = SmallHeadFather()
    fa.washing()
}

輸出

我是小頭爸爸颤陶,我讓我兒子洗碗
我是大頭兒子颗管,我在開(kāi)心得洗碗,一次一塊錢(qián)

枚舉類

enum class Week {
    Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
}

fun main(args: Array<String>) {
    println(Week.Monday)
    println(Week.Monday.ordinal)
    Week.values().filter { it.toString().startsWith("S") && it.toString().contains("n") }.map { println(it) }
    Week.values().asList().also(::println)
}

輸出

Monday
1
Sunday
[Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]

密封類

作用:定義子類類型有限的類
密封類和枚舉類的區(qū)別:密封類更在意類型指郁;枚舉類更在意數(shù)據(jù)

sealed class Animal {
    class Fish : Animal()
    class Dog : Animal()
    class Cat : Animal()
}

fun main(args: Array<String>) {
    val type01 = Animal.Fish()
    val type02 = Animal.Dog()
    val type03 = Animal.Cat()
    sayHello(type01)
    sayHello(type02)
    sayHello(type03)
}

fun sayHello(animal: Animal) = when (animal) {
    is Animal.Fish -> println("Hello Fish")
    is Animal.Dog -> println("Hello Dog")
    is Animal.Cat -> println("Hello Cat")
}

輸出

Hello Fish
Hello Dog
Hello Cat
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末忙上,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子闲坎,更是在濱河造成了極大的恐慌疫粥,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腰懂,死亡現(xiàn)場(chǎng)離奇詭異梗逮,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)绣溜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)慷彤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人怖喻,你說(shuō)我怎么就攤上這事底哗。” “怎么了锚沸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵跋选,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我哗蜈,道長(zhǎng)前标,這世上最難降的妖魔是什么坠韩? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮炼列,結(jié)果婚禮上只搁,老公的妹妹穿的比我還像新娘。我一直安慰自己俭尖,他們只是感情好氢惋,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著目溉,像睡著了一般明肮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缭付,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天柿估,我揣著相機(jī)與錄音,去河邊找鬼陷猫。 笑死秫舌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绣檬。 我是一名探鬼主播足陨,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼娇未!你這毒婦竟也來(lái)了墨缘?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤零抬,失蹤者是張志新(化名)和其女友劉穎镊讼,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體平夜,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蝶棋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了忽妒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玩裙。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖段直,靈堂內(nèi)的尸體忽然破棺而出吃溅,到底是詐尸還是另有隱情,我是刑警寧澤鸯檬,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布罕偎,位于F島的核電站,受9級(jí)特大地震影響京闰,放射性物質(zhì)發(fā)生泄漏颜及。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一蹂楣、第九天 我趴在偏房一處隱蔽的房頂上張望俏站。 院中可真熱鬧,春花似錦痊土、人聲如沸肄扎。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)犯祠。三九已至,卻和暖如春酌呆,著一層夾襖步出監(jiān)牢的瞬間衡载,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工隙袁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痰娱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓菩收,卻偏偏與公主長(zhǎng)得像梨睁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子娜饵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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