《Kotlin核心编程》2021版复习记录

目录

0 前言

准备先回顾一下kotlin。
每天看到哪里就会写到哪里,随缘记录一下我觉得比较常用的思想和知识点。暂时粗略过一遍,方面查看。后续有时间再仔细看看;
争取不和学flutter一样暂时烂尾hh。

1 基础语法

1.1 数据类型

和java一样Byte、Short、Int、Long、Float、Double、Char、Boolean 但是没有包装类型。


val a: String = "Hello, World!"

1.2 数组

IntArray 是Kotlin中表示原生整型数组(int[])的一个类型别名

val intArray: IntArray = intArrayOf(1, 2, 3, 4, 5)
val doubleArray: DoubleArray = doubleArrayOf(1.1, 2.2, 3.3)
val stringArray: Array<String> = arrayOf("Kotlin", "Java", "Python")

1.3 集合

val list = mutableListOf("Kotlin", "Java", "Python")
val set = mutableSetOf("Kotlin", "Java", "Python")
val map: MutableMap<Int, String> = mutableMapOf(1 to "Kotlin", 2 to "Java", 3 to "Python")

1.4 遍历数据和集合

// 部分遍历
intArray.forEachIndexed{ index, value ->
    println("$index : $value")
  }
for ((i,j) in intArray.withIndex()){
    println("$i : $j")
}
map.forEach {
    println("${it.key} : ${it.value}")
}

1.5 函数声明返回值类型

声明返回值为Int类型,有时候可以不用声明,但是我一般为了避免错误,还是都会显示声明。

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

1.6 var 和 val

var 变量
val 引用不可变,对照java中用了final关键字。
开发中优先使用val,val不行再用var

2 高阶函数和lambda表达式

2.1 高阶函数

高阶函数就是函数的入参或返回值也是函数的函数。

 (Int) -> Unit

通过 -> 来组织参数类型和返回值类型,左边是参数,右边是返回值。
多个参数

 (Int,String) -> Unit

还可以给参数指定名字

  (x: Int,y: String?) -> Unit

如果这个函数变量作为参数也是可不选(为空)

 ( (x: Int,y: String?) -> Unit)?

2.2 方法和成员引用

val p1 = ::Person
p1("tian", 18).test()

2.3 链式调用

fun add(x: Int,y: Int,z: Int) = {
	x+y+z
}
fun add(x: Int) = { y: Int ->
  {z: Int -> x+y+z}
}

一般函数有多个参数,然后最后一个参数为函数的时候可以柯里化。 就是用直接{
}。

2.4 扩展函数

fun View.invisible(){
	this.visibility = View.INVISIBLE
}

2.5 面向表达式编程

在这里插入图片描述
表达式:可以返回值的语句。

在这里插入图片描述

2.5.1 when表达式

在这里插入图片描述

2.5.2 for循环
for(i in 1..5 step 2) {
    println(i)
}
for(i in 5 downTo 1) {
    if(i == 3) break
    println(i)
}

for(i in 1 until 5) {
    if(i == 3) continue
    println(i)
}
val list4 = listOf(1,2,3)
list4.forEach {
    println("it: $it")
}

list4.forEachIndexed { index, element ->
    println("$index: $element")
}
for ((index,value) in list4.withIndex()){
	println("$index: $value")
}

2.5.3 in
val flag = 1 in listOf(1,3,4)
println(flag)

2.6 字符串相等

==用来比较值
===用来比较引用

3 面向对象

3.1 类

和java区别
在这里插入图片描述

3.1.1 接口注意事项

在这里插入图片描述

3.2 初始化

init语句块
延迟初始化 lateinit和by lazy
by lazy 需要和val 连用,也就是引用不可变
在这里插入图片描述

lateinit 则是用于var,而且不能用于基本类型,如Int、Long等
在这里插入图片描述

3.3 构造方法

在这里插入图片描述
从构造方法需要直接或者间接委托给主构造方法。

3.4 类访问控制

类和方法默认不可继承或重写,需要加上open关键字 (final修饰)
继承和接口实现都是用:

3.5 使用final真的好吗

在这里插入图片描述

3.6 类访问修饰符

在这里插入图片描述
internel

在这里插入图片描述

内部类使用private修饰

在这里插入图片描述

3.6.1 访问修饰符和java比较

在这里插入图片描述

3.7 多继承相关

骡马问题
继承骡马的后代继承谁的run方法?
有歧义

在这里插入图片描述

3.7.1 get 和 set

在这里插入图片描述

3.7.2 内部类解决多继承问题

需要inner
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.7.2 委托代替多继承

委托 ,调用A的A方法,其实是B类的A方法来执行
在这里插入图片描述

3.8 data class 数据类

3.9 Pair和Triple

在这里插入图片描述

3.10 伴生对象

companian object
类似static,但不是真的static
如果真static需要有@jvm…的一个注解

3.11 天生的单例 object

object 表达式
在这里插入图片描述
在这里插入图片描述

4 代数数据类型和模式匹配

4.1 代数类型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2 模式匹配

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5 类型系统

5.1 null

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2 ?:操作符

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.3 Any?

在这里插入图片描述

5.4 kotlin中装箱和拆箱

在这里插入图片描述

在这里插入图片描述

5.5 泛型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.6 泛型擦除

5.7 协变

6 lambda和集合

6.1 调用java的函数式接口

在这里插入图片描述
在这里插入图片描述

6.2 with和apply

在这里插入图片描述
在这里插入图片描述

6.3 map

在这里插入图片描述
在这里插入图片描述

6.4 filter和count

在这里插入图片描述
在这里插入图片描述

6.5 别样的求和方式:sumBy、sum、fold、reduce

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.6 分组groupBy

在这里插入图片描述

6.7 扁平化,处理嵌套集合flatten、flatMap

以后再看

6.8 集合继承关系

在这里插入图片描述

6.9 可变集合和只读集合

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
和java互操作时候注意:
在这里插入图片描述

6.10 惰性集合

6.10.1 序列

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.10.2 序列和链式调用区别

在这里插入图片描述

6.10.3 序列是无限的

在这里插入图片描述

6.11 内联函数

主要是优化lambda表达式带来的开销
在这里插入图片描述
在这里插入图片描述
简单来说就是编译过程中把函数放到该调用的位置,避免额外生成类和调用的开销。

6.11.1 避免使用内联函数的情形

在这里插入图片描述
不内联
noinline

6.12 非局部返回

在这里插入图片描述
在这里插入图片描述

6.13 具体化参数类型

在这里插入图片描述

7 多态和扩展

7.1 子类型多态

在这里插入图片描述

7.2 参数多态

在这里插入图片描述

7.3 对类进行扩展

不会修改类本身,避免类被污染。
扩展函数不会带来额外的性能消耗。

7.4 run、let、also、takeIf

run
在这里插入图片描述
let
在这里插入图片描述
also
在这里插入图片描述
takeIf
在这里插入图片描述

7.5 扩展注意事项

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8 元编程(反射)

8.1 程序和数据

在这里插入图片描述元编程就像⾼阶函数⼀样,是⼀种更⾼阶的抽象,⾼阶函数将函数作为输⼊或输出,⽽元编程则是将程序本⾝作为输⼊或输出。
在这里插入图片描述

8.2 常见的元编程方法

kotlin中主要还是反射

8.3 反射

8.4 注解

在这里插入图片描述

8.5 注解处理器

9 设计模式

在这里插入图片描述

9.1 创建型模式

在这里插入图片描述

9.1.1 工厂模式

在这里插入图片描述

在这里插入图片描述

用单例代替工厂类
在这里插入图片描述

伴⽣对象创建静态工厂方法
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值