关键字与运算符
硬关键字
以下标记始终被解释为关键字,不能用作标识符:
as
as?
用于安全类型转换。break
终止循环的执行。class
声明一个类。continue
继续到最近封闭循环的下一步。do
开始一个 do/while 循环(带后置条件的循环)。else
定义当条件为假时执行的if 表达式分支。false
指定布尔类型的“假”值。for
开始一个for 循环。fun
声明一个函数。if
开始一个if 表达式。in
- 在for 循环中指定被迭代的对象。
- 用作中缀运算符,检查值是否属于范围、集合或其他定义“contains”方法的实体。
- 在when 表达式中用于相同目的。
- 将类型参数标记为逆变。
!in
- 用作运算符,检查值是否不属于范围、集合或其他定义“contains”方法的实体。
- 在when 表达式中用于相同目的。
interface
声明一个接口。is
!is
- 检查值是否不具有特定类型。
- 在when 表达式中用于相同目的。
null
是一个常量,表示不指向任何对象的对象引用。object
同时声明一个类及其实例。package
为当前文件指定包。return
从最近的封闭函数或匿名函数返回。super
this
throw
抛出异常。true
指定布尔类型的“真”值。try
开始一个异常处理块。typealias
声明一个类型别名。typeof
保留供将来使用。val
声明一个只读的属性或局部变量。var
声明一个可变的属性或局部变量。when
开始一个when 表达式(执行给定的一个分支)。while
开始一个while 循环(带前置条件的循环)。
软关键字
以下标记在其适用的上下文中作为关键字,在其他上下文中可用作标识符:
by
catch
开始一个处理特定异常类型的块。constructor
声明一个主构造函数或次级构造函数。delegate
用作注解使用点目标。dynamic
在 Kotlin/JS 代码中引用动态类型。field
用作注解使用点目标。file
用作注解使用点目标。finally
开始一个在 try 块退出时总是执行的块。get
- 声明属性的 getter。
- 用作注解使用点目标。
import
将另一个包中的声明导入到当前文件。init
开始一个初始化块。param
用作注解使用点目标。property
用作注解使用点目标。receiver
用作注解使用点目标。set
- 声明属性的 setter。
- 用作注解使用点目标。
setparam
用作注解使用点目标。value
与class
关键字一起声明一个内联类。where
指定泛型类型参数的约束。
修饰符关键字
以下标记在声明的修饰符列表中作为关键字,在其他上下文中可用作标识符:
abstract
将类或成员标记为抽象。actual
在多平台项目中表示平台特定的实现。annotation
声明一个注解类。companion
声明一个伴生对象。const
将属性标记为编译时常量。crossinline
禁止传递给内联函数的 lambda 中的非局部返回。data
指示编译器为类生成规范成员。enum
声明一个枚举。expect
将声明标记为平台特定,期望在平台模块中实现。external
将声明标记为在 Kotlin 外部实现(可通过 JNI 或在 JavaScript 中访问)。final
禁止重写成员。infix
允许使用中缀表示法调用函数。inline
告诉编译器在调用点内联函数及其传递的 lambda。inner
允许从嵌套类引用外部类实例。internal
将声明标记为在当前模块中可见。lateinit
允许在构造函数外部初始化非空属性。noinline
关闭传递给内联函数的 lambda 的内联。open
允许子类化一个类或重写一个成员。operator
将函数标记为重载运算符或实现约定。out
将类型参数标记为协变。override
将成员标记为重写超类成员。private
将声明标记为在当前类或文件中可见。protected
将声明标记为在当前类及其子类中可见。public
将声明标记为在任何地方都可见。reified
将内联函数的类型参数标记为在运行时可访问。sealed
声明一个密封类(具有受限子类化的类)。suspend
将函数或 lambda 标记为挂起(可用作协程)。tailrec
将函数标记为尾递归(允许编译器用迭代替换递归)。vararg
允许为参数传递可变数量的参数。
特殊标识符
以下标识符由编译器在特定上下文中定义,在其他上下文中可用作常规标识符:
运算符和特殊符号
Kotlin 支持以下运算符和特殊符号:
+
、-
、*
、/
、%
- 数学运算符*
也用于将数组传递给可变参数。
=
- 赋值运算符。
- 用于指定参数的默认值。
+=
、-=
、*=
、/=
、%=
- 增强赋值运算符。++
、--
- 递增和递减运算符。&&
、||
、!
- 逻辑“与”、“或”、“非”运算符(对于位运算,请使用相应的中缀函数)。==
、!=
- 相等运算符(对于非基本类型,转换为调用equals()
)。===
、!==
- 引用相等运算符。<
、>
、<=
、>=
- 比较运算符(对于非基本类型,转换为调用compareTo()
)。[
、]
- 索引访问运算符(转换为调用get
和set
)。!!
断言表达式为非空。?.
执行安全调用(如果接收者非空,则调用方法或访问属性)。?:
如果左侧值为 null,则取右侧值(Elvis 运算符)。::
创建一个成员引用或类引用。..
、..<
创建范围。:
在声明中将名称与类型分开。?
将类型标记为可空。->
- 分隔lambda 表达式的参数和主体。
- 分隔函数类型的参数和返回类型声明。
- 分隔when 表达式分支的条件和主体。
@
- 引入一个注解。
- 引入或引用一个循环标签。
- 引入或引用一个lambda 标签。
- 引用来自外部作用域的“this”表达式。
- 引用一个外部超类。
;
分隔同一行上的多个语句。$
在字符串模板中引用变量或表达式。_
- 在lambda 表达式中替代未使用的参数。
- 在解构声明中替代未使用的参数。
有关运算符优先级,请参阅 Kotlin 语法中的此参考。