包的定义与导入
包的声明应处于源文件顶部:
package org.example
fun printMessage() { }
class Message { }
// ……
源文件所有内容(无论是类还是函数)都包含在声明的包内。 所以上例中 printMessage() 的全名是 org.example.printMessage, 而 Message 的全名是 org.example.Message。
如果没有指明包,该文件的内容属于无名字的默认包。
默认导入
有多个包会默认导入到每个 Kotlin 文件中:
手动导入
除了默认导入之外,每个文件可以包含它自己的导入指令。 导入语法在语法中讲述。
可以导入一个单独的名字,如.
import org.example.Message // 现在 Message 可以不用限定符访问
也可以导入一个作用域下的所有内容(包、类、对象等):
import org.example.* // “org.example”中的一切都可访问
如果出现名字冲突,可以使用 as 关键字在本地重命名冲突项来消歧义:
import org.example.Message // Message 可访问 import org.test.Message as testMessage // testMessage 代表“org.test.Message”关键字 import
关键字 import 并不仅限于导入类;也可用它来导入其他声明:
- 顶层函数及属性;
- 在对象声明中声明的函数和属性;
- 枚举常量。
顶层声明的可见性
如果顶层声明是 private 的,它是声明它的文件所私有的(参见 可见性修饰符)。
程序入口点
Kotlin 应用程序的入口点是 main 函数。
fun main() {
println("Hello world!")
}
注释
与大多数现代语言一样,Kotlin 支持单行(或行末)与多行(块)注释。
// 这是一个行注释
Kotlin 中的块注释可以嵌套。
并且在这里结束。 */
字符串模板
字符串字面值可以包含模板表达式 ,即一些小段代码,会求值并把结果合并到字符串中。 模板表达式以美元符($)开头,由一个简单的名字构成:
var a = 1 // 模板中的简单名称: val s1 = "a is $a"
或者用花括号括起来的任意表达式:
val a = 2
// 模板中的任意表达式:
val s2 = "${s1.replace("is", "was")}, but now is $a"
原始字符串与转义字符串内部都支持模板。 如果你需要在原始字符串中表示字面值 $ 字符(它不支持反斜杠转义),你可以用下列语法
val price = """
${'$'}9.99
"""
变量
定义只读局部变量使用关键字 val 定义。只能为其赋值一次。
val a: Int = 1 // 立即赋值 val b = 2 // 自动推断出 `Int` 类型 val c: Int // 如果没有初始值类型不能省略 c = 3 // 明确赋值
可重新赋值的变量使用 var 关键字:
var x = 5 // 自动推断出 `Int` 类型 x += 1
顶层变量:
val PI = 3.14 // 顶级只读变量使用大写命名
var x = 0
fun incrementX() {
x += 1
}
当只读变量作为一个类的属性时,值是可以变化的
class X {
val b: Int // 作为属性时,只能叫只读变量,因为get到的值不一定相同
get() {
return (Math.random() * 100).toInt()
}
}



