Kotlin 教程
Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。
Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。
在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言。
1. 第一个 Kotlin 程序
Kotlin 程序文件以 .kt 结尾,如:hello.kt 、app.kt。
1) 最简版
package hello // 可选的包头 fun main(args: Array<String>) { // 包级可见的函数,接受一个字符串数组作为参 println("Hello World!") // 分号可以省略 }
2) 面向对象
class Greeter(val name: String) { fun greet() { println("Hello, $name") } } fun main(args: Array<String>) { Greeter("World!").greet() // 创建一个对象不用 new 关键字 }
2. 为什么选择 Kotlin
- 简洁: 大大减少样板代码的数量。
- 安全: 避免空指针异常等整个类的错误。
- 互操作性: 充分利用 JVM、Android 和浏览器的现有库。
- 工具友好: 可用任何 Java IDE 或者使用命令行构建。
<font face= 黑体>在 Java 中对象是最重要的,而在 Kotlin 中,方法才是最重要的,Kotlin 中方法是可以直接定义在文件里面的,不需要一定定义在类里面。
2.1、方法声明
<font face= 黑体>Kotlin 中一个方法的基本格式如下所示:
<font face= 黑体>具体代码实现
fun plus(a: Int, b: Int): Int { return a + b }
2.1.1、类的成员方法
<font face= 黑体>类的成员方法的写法
class Person { // 成员方法 fun test1() { println("成员方法") } }
<font face= 黑体>成员方法的调用方式
fun main() { Person().test1() }
2.1.2、类方法(静态方法)
<font face= 黑体>Kotlin 中并没有 static 关键字,不过我们可以借助companion object(Kotlin 的伴生对象) 来实现类方法的目的。
<font face= 黑体>静态方法的写法
class Person { companion object { fun test2() { println("companion object 实现类方法") } } }
<font face= 黑体>静态方法的调用
Person.test2()
2.1.3、静态方法
<font face= 黑体>在 Kotlin 中如果我们想实现一个工具类 util 的话,可以借助 object 关键字,用 object 关键字修饰的类中的方法都是"静态方法"。
<font face= 黑体>object 修饰的类的写法
object NumUtil { fun double(num: Int): Int { return num * 2 } }
<font face= 黑体>静态方法的调用
println("umUtil.double(2): ${NumUtil.double(2)}")
2.1.4、单表达式方法
当方法返回单个表达式时,可以省略花括号并且在 = 符号之后指定代码体即可。
<font face= 黑体>单表达式方法的写法
fun double(x: Int): Int = x * 2
2.2、方法参数
2.2.1、默认参数
<font face= 黑体>在 Kotlin 中,可以给方法设置一些默认参数,当省略相应的参数时使用默认参数值。与 Java 相比,这可以减少重载数量。
<font face= 黑体>默认参数写法
// off 的默认值就是 0, len 的默认值就是 b.size fun read(b: Array<Byte>, off: Int = 0, len: Int = b.size) { }
2.2.2、可变数量的参数
<font face= 黑体>在 Java 中利用 ...(比如 String...) 来设置可变类型的参数,在 Kotlin 中是通过 vararg 修饰符标记参数来实现可变参数的。
<font face= 黑体>可变参数写法
// 通过 vararg 修饰 fun append(vararg str: Char): String { val result = StringBuffer() for (char in str) { result.append(char) } return result.toString() }
<font face= 黑体>可变参数方法的调用
println(append('h', 'e', 'l', 'l', 'o'))
2.3、方法作用域
<font face= 黑体>在 Kotlin 中方法可以在文件顶层声明,这意味着你不需要像 Java 那样需要创建一个类来保存一个方法。
<font face= 黑体>此外除了顶层方法,Kotlin 中方法也可以声明在局部作用域、作为成员方法以及扩展方法。