项目结构
我们可以简单看一下 Kotlin 项目所包含的目录、文件。
- Kotlin 项目中包含了许多含
gradle
字样的目录或文件,这些都是与构建工具 Gradle 相关的目录。要了解这些需要系统地学习 Gradle,在这里不会过多涉及,其中用的最多的是build.gradle.kts
。 - Kotlin 源文件存放在
src\main\kotlin
中,而资源(如图片、字体等等)存放于src\main\resources
中。// 项目结构 untitled |-- .gradle // Gradle 缓存 |-- .idea // IDEA 配置 |-- build // Gradle 构建输出内容,例如运行 Jar 任务,会在此处生成 Jar 包。 |-- gradle // 里边会有 wrapper,主要是指定 Gradle 版本 |-- src |-- main |-- kotlin // Kotlin 源文件 |-- resources // 资源 |-- test // 测试代码 |-- .gitignore // Git 忽略项配置 |-- build.gradle.kts // 构建脚本 |-- gradle.properties // 配置 Gradle 属性 |-- gradlew // 用于 Linux 或 MacOS 下执行 Gradle 任务 |-- gradlew.bat // 用于 Windows 下执行 Gradle 任务 |-- settings.gradle.kts // 做一些 Gradle 全局设置,管理模块等
包的定义和导入
定义
在我们的电脑上,需要使用文件夹来归类不同的软件、文件。在 Kotlin 中,包也是这样的作用。
- 在 Kotlin 项目中,以“
package
+包名”定义源文件的包名,该语句必须写在内容的最顶端(一般情况下放在第一行,但不一定要是第一行,前面可以加空行)。 - 源文件中的内容会属于该包下,比如
main
函数,其全名为ink.awning.main
。 - 如果不声明包名,则为默认包名(空的)。
- 包名一般情况下是跟所在文件夹一一对应,比如
package ink.awning
说明文件在kotlin\ink\awning
下,如果不对应将会出现弱警告(当然,在运行时并不会抛出异常,只是容易产生混乱,这里建议Main.kt
的包定义删掉,使用默认包名,不然二级及以上目录重构(重命名)时不能自动更改包名):
Note:一般情况下,使用 IDEA 很少有需要管软件包的情况,我们只需要像平时新建文件、文件夹一样,右键点击某一个目录,在新建中选择 Kotlin 类/文件创建 Kotlin 源文件,或者选择软件包新建一个目录,IDEA会自动生成 Kotlin 文件的包名。将某一文件拖动到其他目录并确认,IDEA也会自动修改文件的包名。
导入
同一包下的内容,可以直接使用,如果要使用其他包中的内容,需要使用“import
+名称”导入,这里的名称是全名。
// 结构
kotlin
|-- other
|-- Other.kt // package ink.awning.other
|-- Inner.kt // package ink.awning
|-- Main.kt // package ink.awning
package ink.awning
// 使用全名导入 Other
import ink.awning.other.Other
fun main() {
// 使用同一包下的内容,无需导入
Inner()
// 使用不同包下的内容,需要导入
Other()
}
如果我们需要导入一个包下的全部内容,可以用*
import ink.awning.other.*
程序入口
程序入口可以指明程序开始运行的位置。我们在运行项目时,其实是运行了Main.kt
下的main
函数,可以看到在main
函数前有一个
播放按钮,点击此按钮与顶栏的效果一致。
Kotlin 支持以下两种格式的程序入口:
fun main() {}
fun main(args: Array<String>) {}
注释
注释是不会被执行的内容
// 我是单行注释,这一行都是我的。
/*
我是多行注释
括起来的几行都不会被执行
*/
句末分号
Kotlin 一个语句后边可以加分号表示该语句结束,不过通常省略掉
fun main() {
println("Hello Kotlin!");
// 有时候如果语句很短,我们可以把它们写在同一行,用分号隔开就行
print("Hello"); print(" "); print("Kotlin!")
}
Note:
println
打印出内容后会换行,而