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 语言核心语法规则。