<p class="ql-block">class中可以定义属性和fun方法</p><p class="ql-block">定义带主构造函数的类class(属性 种类:类型,){反应}→创建实例需要在fun中传入参数</p><p class="ql-block">val+类(种类,种类)</p><p class="ql-block">interface{}→接口(Object)</p><p class="ql-block">private修饰属性,提供public的get和set方法=封装</p><p class="ql-block"><span style="color:rgb(237, 35, 8);">val,var=属性(只读,可变)</span></p><p class="ql-block">package com.→声明软件包</p><p class="ql-block">example=举例</p><p class="ql-block">demo=示范</p><p class="ql-block">import→导入其他包的类函数[导入有冲突用as重命名]</p><p class="ql-block">⭐internal=内部构件class</p><p class="ql-block">Package Private→包私有[外部包无法访问其]</p><p class="ql-block">🍵parameters=参数</p><p class="ql-block">constructor=构造器(次)</p><p class="ql-block">格式→属性:种类:类型=默认值</p><p class="ql-block">init{=最初→初始化程序块</p><p class="ql-block">次构造函数调用主构造函数→this</p><p class="ql-block">次构造函数[先委托给主或次]</p><p class="ql-block">lateinit修饰属性类型[不能是double,int]→延迟初始化属性[确保已初始化]</p><p class="ql-block">延迟变量必须用在fun中=赋初始化值</p><p class="ql-block">val result: 类型 by lazy{→初始化变化[惰性初始化]</p><p class="ql-block">observable→监听变化</p><p class="ql-block">properties=属性</p><p class="ql-block">Delegates=代表</p><p class="ql-block"><span style="color:rgb(237, 35, 8);">类名首字母要大写[Kotlin的规范]</span></p><p class="ql-block">类和方法默认是final的,若要被继承和重写,需用open关键字.</p><p class="ql-block"><span style="color:rgb(57, 181, 74);">final=最终的 open=公开的</span></p><p class="ql-block">格式:open class a{open fun b{反应</p><p class="ql-block"><span style="color:rgb(237, 35, 8);">override=覆盖</span></p><p class="ql-block"><span style="color:rgb(237, 35, 8);">属性is类型→检查对象实际类型 !is[相反]</span></p><p class="ql-block">a原类型.to新类型()→转换类型</p><p class="ql-block">as?→安全转换[不成功返回null]</p><p class="ql-block">is可以智能强制转→val</p><p class="ql-block">Any类→equals(),hashCode()和toString()的方法[对象属性值,哈希码,字符串]</p><p class="ql-block">object {}→声明对象[创建实例立即初始化]</p><p class="ql-block"><span style="color:rgb(22, 126, 251);">companion=伙伴→伴生对象[一个类只能有一个]</span></p><p class="ql-block">伴生对象可命名{}</p><p class="ql-block">inner class→内部类[可访问外部成员]</p><p class="ql-block">toString()→默认按定义顺序输出[return"$ by" ]</p><p class="ql-block"><span style="color:rgb(237, 35, 8);">println(a.equals(b))比较</span></p><p class="ql-block">println(a.hashCode())</p><p class="ql-block">.copy(修改)→创建副本</p><p class="ql-block">val(,,,)=a→解构声明[种类]</p><p class="ql-block">enum class {枚举类}[列表用分号]</p><p class="ql-block">RGB()→三原色</p><p class="ql-block">operator=操作员→重载关键词</p><p class="ql-block">plus=加上 minus=减去</p><p class="ql-block">other=其他的</p><p class="ql-block">abstractMethod()→抽象方法</p><p class="ql-block">先interface定义接口后class实现</p><p class="ql-block">类接口之间用逗号→实现接口用冒号:</p><p class="ql-block">格式→类:接口{}</p><p class="ql-block">override→重写修辞必有[实现抽象方法]</p><p class="ql-block"><span style="color:rgb(237, 35, 8);">属性 类型Box→泛型类定义[储存函数值]</span></p><p class="ql-block">类型参数需放在类名后的尖括号[类]</p><p class="ql-block">类型参数a :T 可以代表任何类型</p><p class="ql-block">Comparable=相当的</p><p class="ql-block">a else b[a接口相对b]</p><p class="ql-block">where→多个上界约束[T]</p><p class="ql-block">Serializable=可序列化</p><p class="ql-block">a in b[检查a是否在b集合中]</p><p class="ql-block">out→泛型类型协变[仅返回值]</p><p class="ql-block">reified只能用于内联函数[泛型类型必须有默认构造函数]=使具体化</p><p class="ql-block"><span style="color:rgb(237, 35, 8);">fun 类名.函数名(参数列表): 返回类型 { 函数体 }→扩展函数格式</span></p><p class="ql-block"><span style="color:rgb(57, 181, 74);">fun 类型.Count=计数 split("").size=按空格分割</span></p><p class="ql-block">Empty=空的</p><p class="ql-block">list.average()类型{=平均数</p><p class="ql-block">函数体return Vector(x - other.x, y - other.y)后main可调用(ax-bx,ay-by)</p><p class="ql-block">扩展属性没有幕后字段,所以不能有初始化器,必须定义get(只读)或 set.</p><p class="ql-block">格式→get()= set(){}</p><p class="ql-block">Nullable→可为空[?.避免空指针异常/链式调用]</p><p class="ql-block">量名.reversed()→反转字符串</p><p class="ql-block">filter{it}→过滤</p><p class="ql-block">map{it}→转换成运算后的</p><p class="ql-block">val sum: Int.(Int) -> Int = { other -> this + other }</p><p class="ql-block">val result = 3.sum(5) // 运行结果:8→接收器</p><p class="ql-block">val Int.isEven: Boolean</p><p class="ql-block"> get() = this % 2 == 0→判断偶数</p><p class="ql-block">属性扩展</p><p class="ql-block">blockCall()=阻止呼叫→阻塞调用</p><p class="ql-block"><span style="color:rgb(57, 181, 74);">Thread.sleep(2000)=通过睡眠→耗时2秒</span></p><p class="ql-block"><span style="color:rgb(57, 181, 74);">delay(2000)→推迟2秒</span></p><p class="ql-block">⭐<span style="color:rgb(22, 126, 251);">launch{}=开始→新协程</span></p><p class="ql-block">🍵block=阻塞</p><p class="ql-block">GlobalScope.launch→全局作用域</p><p class="ql-block">runBlocking→阻塞线程</p><p class="ql-block">⭐async→协程返回结果</p><p class="ql-block">⭐<span style="color:rgb(237, 35, 8);">println(deferred.await())=延迟.等待[返回结果]</span></p><p class="ql-block">GlobalScope.launch→通过前面启动协程=全局范围</p><p class="ql-block">okhttp添加import</p><p class="ql-block">Successful=成功的</p><p class="ql-block">request=请求</p><p class="ql-block">client=客户</p><p class="ql-block"><span style="color:rgb(237, 35, 8);">.url(" ")→网页地址</span></p><p class="ql-block">execute→执行</p><p class="ql-block">call=呼叫</p><p class="ql-block">response=反应</p><p class="ql-block">.post(body)=邮寄;马上→请求体</p><p class="ql-block"><span style="color:rgb(237, 35, 8);">flow{=流→冷流[被收集才会执行for(a in 区间..){emit(a)格式</span></p><p class="ql-block"><span style="color:rgb(22, 126, 251);">emit=发出 </span></p><p class="ql-block"><span style="color:rgb(237, 35, 8);">flow.collect { value ->println(value)→收集值</span></p><p class="ql-block">import kotlinx.coroutines.flow.flow→导入map,+runBlocking</p><p class="ql-block">coroutines=协同程序</p><p class="ql-block">collect=收集→阻塞协程</p><p class="ql-block">flow.toList()→变成列表[]</p><p class="ql-block">flow.map {it的变化}</p><p class="ql-block">filter同以往[导入.*包]</p><p class="ql-block">MutableSharedFlow()=可变的共享热流</p><p class="ql-block">.emit(1)向共享发1</p><p class="ql-block"><span style="color:rgb(237, 35, 8);">launch { sharedFlow.collect { println(it) } }→收集共享区的值</span></p><p class="ql-block">channel=引导→通道</p><p class="ql-block">send=发送</p><p class="ql-block">.close()=关闭[引用去导入协同程序中]</p><p class="ql-block">Channel(容量)→格式</p><p class="ql-block">容量通道,操作在通道满之前不会挂起</p><p class="ql-block">for (b in channel) println(b)接收并打印</p><p class="ql-block">receive=得到</p><p class="ql-block">.tryReceive()→不会阻塞[if else]</p><p class="ql-block">=produce{=生产→自动关闭通道</p><p class="ql-block"><span style="color:rgb(237, 35, 8);">.send()→发送数据</span></p><p class="ql-block"><span style="color:rgb(237, 35, 8);">.receive()→接收数据</span></p><p class="ql-block">merge(,)→合并通道</p><p class="ql-block">可以直接用对象名调用Java类方法</p><p class="ql-block"><span style="color:rgb(22, 126, 251);">空安全处理→Java[处理null值]→用Elvis运算符?:</span></p><p class="ql-block">⭐var str: String? = null</p><p class="ql-block"> println(str?.length)→安全调用操作符</p><p class="ql-block">🍵throw=扔</p><p class="ql-block">Kotlin→可抛异常try{throw异常}catch(e:){反应}无需处理,了解即可</p><p class="ql-block">Exception()=例外</p>