Kotlin关键字快速查找

关键字 注释
constructor 构造函数
Any Kotlin Any简介Any类型是Kotlin所有非空类型的超类型(非空类的根),包含像Int这样的基本数据类型
open 在Kotlin开发中类和方法默认不允许被继承和重写,等同于Java中用 final 修饰类和方法。如果在Kotlin 中类和方法想被继承和重写,需添加open 关键字修饰。
final 表示类不可继承,默认属性
var var是一个可变变量,这是一个可以通过重新分配来更改为另一个值的变量。这种声明变量的方式和Java中声明变量的方式一样。
val val是一个只读变量,这种声明变量的方式相当于java中的final变量。一个val创建的时候必须初始化,因为以后不能被改变。
const 表示静态属性,在java中并不会生成get set
set(value) {field = value} 重写该属性的get和set
:: 双冒号,表示调用当前 Class 的内部方法 MainActivity::class.java。java的写法是XX.class
companion 类内部的对象声明可以用 companion 关键字标记,这样它就与外部类关联在一起,我们就可以直接通过外部类访问到对象的内部元素
by 委托,可用于类委托和属性委托
Lazy 延迟属性,第一次调用会有过程,后面就是只有纯结果。lazy 应用于单例模式(if-null-then-init-else-return),而且当且仅当变量被第一次调用的时候,委托方法才会执行。lazy 只用于常量 val
lateinit 告诉编译器我没法第一时间就初始化,但我肯定会在使用它之前完成初始化的。lateinit 只用于变量 var
Not Null 委托不能为空,如果使用的时候为空,则会抛出异常
by Delegates.observable 实现观察者模式,观察属性的变化
by map 把属性储存在映射map中
类型? 表示当前xx对象可以为空
notNull(a,b) notNull(a,b){ xxxx } 同时判断多个变量为空时的逻辑处理
?: foo?:bar,如果foo不为null则返回foo,如果为null则返回bar
xx?.toLong()?: 0 xx如果为null就返回0,否则返回Long类型数值
!! 判断这个参数如果是空参数,就抛出异常
?. 与java相同:if(a!=null){ a.run();}
object.also{} var result = mVar.also {999},最终结果 = 返回一个mVar对象给变量result
object.let{} var result = mVar.let {999},最终结果 = 返回999给变量result
object?.let { context -> 去掉默认的it,定义名字为context
object.?.let 与java相同:if(a!=null){ a.run();}
object?.let {//非空时怎么写} ?: let {//为空又怎么写} 判断object非空和为空的逻辑处理
object.apply{} 内联扩展,返回object自身
companion object 伴身对象,kotlin没有静态static的说法,随之代替的是它,具体相关使用Kotlin 对象表达式和对象声明 - 简书 (jianshu.com)
use 代替了java的try-catch-finally
arrayOf 数组
xx in xx 循环
for (index in 1..100) 输出1,2,3,4...100
for (position in 100 downTo 0) 倒序排序,输出100,99,98,97...0
vararg 可变参数,就是类似java的Integer... rest,kotlin语句就是vararg rest: Integer,记得使用rest的时候要在前面加个*,即是 *rest
annotation 注解类
arrayOfNulls 可以用于创建一个指定大小的、所有元素都为空的数组
@Volatile 类似@Synchronized,但是性能优于它,使用volatile必须具备以下2个条件,对变量的写操作不依赖于当前值(比如递增)、该变量没有包含在具有其他变量的不变式中
check(boolean){} 如果boolean为false,抛出异常IllegalStateException
require(boolean){} 如果boolean为false,抛出异常IllegalArgumentException
assert(boolean){} 如果boolean为false,抛出异常AssertionError
sealed 简单来理解就是他是一个拓展版的枚举(enum),不同之处在于枚举的实例是唯一的,而密封类可以有很多实例,它们可以有不同的状态
suspend 是协程中很重要的关键字,它用来修饰函数,表示此函数是一个会挂起的函数,并且 挂起函数只有在协程中使用或者被另一个挂起函数调用,可以暂停和进行恢复

注解

关键字 注释
@JvmStatic 如果它是函数,则需要从此元素生成额外的静态方法。如果此元素是属性,则应生成额外的静态 getter / setter 方法。

等价代码

作用 java kotlin
实例化 XX xx = new XX() var xx = XX()
实例默认 XX xx var xx : XX
静态变量 private static final String EXTRA_TITLE = "extra_title" private val EXTRA_TITLE = "extra_title"
创建数组 new String[]{MediaStore.Images.ImageColumns.DATA} arrayOf(MediaStore.Images.ImageColumns.DATA)
数组类型 int[] IntArray
类型判断 !(xx instanceof xx) !is
switch switch(xxx) {case A:break;case B: break;default:break;} when(xxx) { A -> B-> else -> {} }
switch 不根据某个变量判断 when {isImage() -> {} isVideo() -> else ->{} }
强制转换 (类型)xxxxx代码 xxxx代码 as 类型
强制转换2 (类型)xxxxx代码 xxx.toLong()
或运算 a |= b a = a or b
internal 适用于内部类使用,如果内部类仅仅使用private,就只能内部类自己访问 internal fun xx()
internal 限制了跨 module 的方法的使用 static final class internal class
internal inner 类似java的内部类,加上inner才可以使用外部变量 class xx internal inner class
接口 public interface xxx interface xxx
字符串格式化,目前Kotlin还没有,只能用java的 String.format java.lang.String.format
范围判断 i>=min && i <=max i in min..max
范围判断2 i>=min && i<max i in min until max
for数组循环 for (int i = 0; i < max; i++) i in 0 until max
for对象循环 for (XXXX item : list) for (item in list)
for相反顺序循环 for (int i = list.size() - 1; i >= 0; i--) for (i in list.indices.reversed()) 或 for (i in (0 until childCount).reversed())
在方法参数里面new对象 ThreadUtils.executeByIo(new ThreadUtils.BaseSimpleBaseTask<XX>(){}) ThreadUtils.executeByIo(object : BaseSimpleBaseTask<XX>(){})
调用类自身 XXXXX.this this@XXXXX
三次元运算符 xx == null ? a : b xx?.toLong() ?: -1
内部类 class myWebChromeClient : WebChromeClient() { private val myWebChromeClient: WebChromeClient = object : WebChromeClient() {

创建数组的几种方法

val asc1 = arrayOf(1, 2, 4)

val asc2 = arrayOfNulls<Int>(3)
asc2[0] = 1
asc2[1] = 2
asc2[2] = 4

val asc3 = Array(3){ i -> i + 1 }

val asc4 = intArrayOf(1, 2, 4)

val asc5 = IntArray(1){ i -> i + 1}

集合

fun main() {
    var mutableMap = mutableMapOf<Int, String>()
    mutableMap[1] = "a"
    mutableMap[0] = "b"
    mutableMap[1] = "c"
    println(mutableMap)

    var mutableList = mutableListOf<Int>()
    mutableList.add(1)
    mutableList.add(0)
    mutableList.add(1)
    println(mutableList)

    var mutableSet = mutableSetOf<Int>()
    mutableSet.add(1)
    mutableSet.add(0)
    mutableSet.add(1)
    println(mutableSet)
}

输出

{1=c, 0=b}
[1, 0, 1]
[1, 0]

协程关键字

作用 kotlin
切换默认的UI线程 viewModel.viewModelScope.launch
切换默认的子线程 viewModel.viewModelScope.launch(Dispatchers.IO)
子线程代码跑完自动走ui线程 withContext(Dispatchers.IO)
挂起当前协程 suspendCancellableCoroutine 函数会挂起当前协程,并给出一个 continuation 对象;直到调用 continuation.resume 恢复协程,或者抛出异常
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容