Kotlin 的关键字体系是学习 Kotlin 的核心内容,掌握它们不仅能避免编译错误,还能写出高效、可维护的代码。本文按照官方分类,将 硬关键字、软关键字、修饰符关键字 全面整理,并附上简洁示例,确保每一个关键字都清楚易懂。
一、硬关键字(始终为关键字,不可作标识符)
硬关键字在 Kotlin 中无条件保留,不能用作变量名、函数名或类名。
| 关键字 | 核心用途 | 示例代码 | 
|---|---|---|
as | 
强制类型转换(失败抛异常);导入时指定类/函数别名 | val num = anyObj as Int import java.util.Date as JavaDate | 
as? | 
安全类型转换(失败返回 null) | val str = anyObj as? String ?: "默认值" | 
break | 
终止当前循环 | for(i in 1..5){ if(i==3) break } loop@ for(i in 1..3){ break@loop } | 
class | 
声明类 | class Person(val name: String){ fun sayHello() = println("Hi") } | 
continue | 
跳过当前循环迭代 | for(i in 1..5){ if(i==3) continue; println(i) } | 
do | 
后置条件循环(至少执行一次) | var j=0; do{ println(j); j++ } while(j<2) | 
else | 
条件不满足时执行分支 | val max = if(a>b) a else b when(num){1->"一"; else->"其他"} | 
false | 
布尔"假"值 | val isFail = false; if(!isFail) println("成功") | 
for | 
循环迭代 | for(i in 1..5) println(i) for((idx,item) in list.withIndex()) {} | 
fun | 
声明函数 | fun add(a:Int,b:Int):Int=a+b fun printMsg()=println("Hello") | 
if | 
条件表达式,可返回值 | val result = if(score>=60) "及格" else "不及格" | 
in | 
判断是否在区间/集合内,或泛型逆变 | for(item in list){} if(5 in 1..10){} class Box<in T> | 
!in | 
判断不在区间/集合内 | if(3 !in 5..10) println("不在区间") | 
interface | 
声明接口 | interface Flyable{ fun fly() } class Bird:Flyable{ override fun fly(){} } | 
is | 
类型检查 | val value:Any="Kotlin"; if(value is String) println(value.length) | 
!is | 
类型反向检查 | if(value !is Int) println("不是整数") | 
null | 
空引用常量 | val s:String?=null val n:Int?=null | 
object | 
单例类、伴生对象、匿名对象 | object Singleton{ val app="Kotlin" } class A{ companion object{} } | 
package | 
指定文件包 | package com.example.kotlin.keywords | 
return | 
函数返回 | fun sub(a:Int,b:Int):Int{return a-b} | 
super | 
父类引用 | class Dog:Animal(){ override fun eat(){ super.eat() } } | 
this | 
当前对象引用 | class Person(val name:String){ fun intro()=println("我是$this.name") } | 
throw | 
抛出异常 | fun checkAge(age:Int){ if(age<0) throw IllegalArgumentException("年龄非法") } | 
true | 
布尔"真"值 | val isSuccess=true; if(isSuccess) println("完成") | 
try | 
异常处理块 | try{10/0} catch(e:ArithmeticException){println(e.message)} | 
typealias | 
类型别名 | typealias StringList=List<String> | 
val | 
只读变量 | val age=25 | 
var | 
可变变量 | var count=0; count+=1 | 
when | 
条件分支表达式 | val grade = when(score){100->"满分"; in 90..99->"优秀"; else->"及格"} | 
while | 
前置条件循环 | var i=0; while(i<3){ println(i); i++ } | 
二、软关键字(上下文敏感,可作标识符)
软关键字在特定语法场景中才被识别,其它场景可作变量名或函数名。
| 关键字 | 核心用途 | 示例代码 | 
|---|---|---|
by | 
委托接口/属性 | class User(p:Printer):Printer by p var name:String by Delegate() | 
catch | 
捕获异常 | try{10/0} catch(e:ArithmeticException){println("除零异常")} | 
constructor | 
主/次构造函数 | class Car constructor(val brand:String) | 
delegate | 
注解使用目标 | @delegate:MyAnnotation val name:String by Delegate() | 
dynamic | 
Kotlin/JS 动态类型 | val jsObj:dynamic=js("{}"); jsObj.name="Kotlin" | 
field | 
注解目标/属性幕后字段 | @field:Nullable var age:Int=0 | 
file | 
注解目标/整个文件 | @file:JvmName("MyFile") package com.example | 
finally | 
try/catch退出执行块 | try{} finally{ file.close() } | 
get | 
属性getter | var isAdult:Boolean get() = age>=18 | 
import | 
导入包 | import java.util.ArrayList | 
init | 
初始化块 | class Person(val name:String){ init{ println("初始化:$name") } } | 
param | 
注解目标/参数 | fun test(@param:NotNull name:String){} | 
property | 
注解目标/属性 | @property:Deprecated var age:Int=0 | 
receiver | 
注解目标/扩展接收者 | fun @receiver:NotNull String.printLen()=println(length) | 
set | 
属性setter | var score:Int set(value){ field=if(value in 0..100) value else 0 } | 
setparam | 
注解目标/setter参数 | var age:Int set(@setparam:Min(0) value){ field=value } | 
where | 
泛型约束 | fun<T> printInfo(t:T) where T:CharSequence,T:Comparable<T>{ println(t.length) } | 
三、修饰符关键字(声明修饰符,其他场景可作标识符)
修饰符关键字用于类、函数、属性的修饰。
| 关键字 | 核心用途 | 示例代码 | 
|---|---|---|
actual | 
多平台实际实现 | expect fun getPlatform():String; actual fun getPlatform()="Android" | 
abstract | 
抽象类/成员 | abstract class Shape{ abstract fun area():Double } | 
annotation | 
注解类 | @Target(AnnotationTarget.CLASS) annotation class MyAnnotation | 
companion | 
类伴生对象 | class A{ companion object{ val info="伴生"; fun show()=println(info) } } | 
const | 
编译期常量 | const val MAX=100 | 
crossinline | 
内联函数禁止非局部返回 | inline fun test(crossinline action:()->Unit){ action() } | 
data | 
数据类 | data class User(val id:Int,val name:String) | 
enum | 
枚举类 | enum class Season{ SPRING,SUMMER } | 
expect | 
多平台声明 | expect class PlatformFile(path:String) | 
external | 
非 Kotlin 实现 | external fun callJs():String | 
final | 
禁止继承或覆盖 | final class FinalClass{ final fun noOverride(){} } | 
infix | 
中缀函数 | infix fun Int.add(n:Int)=this+n | 
inline | 
内联函数 | inline fun measureTime(action:()->Unit){ action() } | 
inner | 
内部类 | class Outer{ inner class Inner{} } | 
internal | 
模块可见性 | internal class Module{ internal fun f(){} } | 
lateinit | 
延迟初始化var属性 | lateinit var email:String | 
noinline | 
内联函数中不内联的lambda | inline fun test(inlineAction:()->Unit,noinline noInlineAction:()->Unit){} | 
open | 
允许继承/覆盖 | open class Animal{ open fun eat(){} } | 
operator | 
操作符重载 | operator fun plus(p:Point)=Point(x+p.x) | 
out | 
泛型协变 | class Box<out T>(val data:T) | 
override | 
重写父类/接口 | override fun eat()=println("吃") | 
private | 
私有可见性 | private val PWD="123456" | 
protected | 
受保护可见性 | protected val secret="秘" | 
public | 
公开可见性 | public class PublicClass{ public fun pubFun(){} } | 
reified | 
实化内联泛型 | inline fun <reified T> isType(v:Any)=v is T | 
sealed | 
密封类 | sealed class Result; class Success:Result() | 
suspend | 
挂起函数 | suspend fun fetch():String{ return "data" } | 
tailrec | 
尾递归 | tailrec fun factorial(n:Int,r:Int=1):Int{ if(n<=1) return r; return factorial(n-1,n*r) } | 
vararg | 
可变参数 | fun sum(vararg nums:Int):Int=nums.sum() | 
总结
Kotlin 全量关键字终极对照表,77 个关键字一览无余:
- 硬关键字 28 个:不可作标识符
 - 软关键字 17 个:上下文敏感
 - 修饰符关键字 32 个:声明修饰符
 
每个关键字都附有精准示例,可直接运行。掌握这些关键字,你就真正掌握了 Kotlin 语言核心语法规则。