kotlin学习指南

kotlin 是一种在 java 虚拟机上运行的静态类型编程语言。
kotlin 可以编译成 java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。

kotlin 官网
kotlin 源码

基本语法

  • 包:源文件通常以包声明开头,package org.example
  • 导入:import org.example.Test,如果命名冲突,使用关键字 as
  • 可见性修饰符:privateprotectedinternalpublic。默认public。
package org.example

// 程序入口
fun main() {
    println("Hello Kotlin!")
}

// 如果指定了主构造函数的可见性,constructor不能省略
class K private constructor(a: Int) {......}

运算符

  • + - * / %
  • 位运算

数据类型

数值: Byte、Short、Int、Long、Float、Double
字符: Char
布尔: Boolean
数组: Array
字符串: String

类型大小(比特数)最小值最大值
Byte8-128127
Short16
Int32
Long64
Float 浮点数32
Double 浮点数64

注意:Kotlin 中的数字没有隐式拓宽转换。例如,具有 Double 参数的函数只能对 Double 值调用,而不能对 Float、Int 或者其他数字值调用。

字面常量

  • 十进制:1234
  • 十六进制 0x 开头:0xEE
  • 二进制 0b 开头:0b0010
  • 不支持八进制

类型转换
kotlin 不支持自动类型转换,需要显式调用函数 toLong等。

数字比较
在 kotlin 中,=== 表示比较对象地址,== 表示比较两个值的大小。

变量

  • val:只读
  • var:可变的
val a = 1 // 整数初始化没有指定类型,默认为 Int
val b = 1L // 整数后面跟 L,显式指定 Long 类型
val c = 1.0 // 浮点数初始化没有指定类型,默认为 Double
val d = 1.0F // 浮点数后面跟 f或F,显式指定 Float 类型
// 指定具体类型语法
val e: Byte = 2 

数组

// 创建
val array = arrayOf(1, 2, 3)

// 遍历 方式1
for (item in array) {
    println(item)
}  
// 遍历 方式2
for (i in array.indices) {
    println(array[i])
}   
// 遍历 方式3
for ((index, value) in array.withIndex()) {
	println("the element at $index is $value")
}
// 遍历 方式4
array.forEach { item ->
    println(item)
}

字符串

// 字符串模板,$符开头
val n = "kotlin"
println("hello $n")
// ${表达式}
println("hello ${n.length}")

控制流:if、when、for、while

if

  • if 是一个表达式,即它会返回一个值。
  • if 的分支可以是代码块,最后的表达式作为该块的值。
  • 如果 if 作为表达式而不是语句,该表达式需要有 else 分支。

when

  • when 既可以作为语句,也可以当做表达式使用。
  • 如果 when 作为表达式,则必须有 else 分支。
  • 多个分支处理一样时,可以将多个分支条件放到一起,用逗号分隔。
// 可以用任意表达式(而不只是常量)作为分支条件
when (x) {
	0, 1 -> print("x == 0 or x == 1")
	else -> print("otherwise")
}

for

// 区间迭代
for (i in 1..3) {
}

while

跳转操作符:

  • return
  • break
  • continue

-----------------------------

函数与Lambda 表达式

  • 函数使用fun关键字声明
  • 参数 使用 Pascal 表示法定义,即 name: type。参数用逗号隔开,每个参数必须有显式类型,函数参数可以有默认值
    name: type =
  • 如果函数不返回任何有用的值,它的返回类型是 Unit
  • 函数作用域 kotlin中函数可以在文件顶层声明,也可以声明在局部作用域、作为成员函数以及扩展函数。
  • vararg 可变数量的参数。
fun method(param1: Int, param2: Int = 0): Int {
	......
}

局部函数
一个函数在另一个函数内部。
成员函数

  • 成员函数是在类或对象内部定义的函数。
  • 成员函数以点表示法调用。
class C {
	fun m() {}
}
C().m()

泛型函数
函数名前使用尖括号指定。

类与对象

kotlin 没有 new 关键字。

构造函数

  • kotlin 中的一个类可以有一个主构造函数以及一个或多个次构造函数

主构造函数

  • 主构造函数是类头的一部分:跟在类名(与可选的类型参数)后。
  • 主构造函数不能包含任何的代码。初始化的代码可以放到以 init 关键字作为前缀的初始化块(initializer
    blocks)中。
  • 如果主构造函数没有任何注解或者可⻅性修饰符,可以省略这个 constructor 关键字。
// 主构造函数语法
class Person constructor(firstName: String) { /*......*/ }
class Person(firstName: String) { /*......*/ }
class Person(val name: String) {
	var children: MutableList<Person> = mutableListOf() 				 				      			          		       constructor(name: String, parent: Person) : this(name) {
		parent.children.add(this) 
	}
}

泛型

抽象类

abstract

数据类与密封类

kotlin 可以创建一个只包含数据的类,关键字为 data

data class User(val name: String, val age: Int)

密封类⽤来表⽰受限的类继承结构:当⼀个值为有限⼏种的类型、⽽不能有任何其他类型时。关键字为 sealed

嵌套类与内部类

枚举类

内联类

继承

  • kotlin中所有类都有一个共同的超类 Any
  • 默认情况下,类是final:不能被继承。要使一个类可继承,请用 open 关键字标记。
  • 方法可覆盖时,需要添加 open
open class Parent {
    open fun sum() {...}
}
class Child : Parent() {
	override fun sum() {
        super.sum()
    }
}

接口

interface ITest {
	fun test()
}

class C : ITest {
	override fun test() {
		// 方法体
	}
}

函数式(SAM)接口

  • 只有一个抽象方法的接口称为函数式接口或 SAM(单一抽象方法)接口。
  • 函数式接口可以有多个非抽象成员,但只能有一个抽象成员。

扩展

集合

协程

kotlin 1.3 引入协程。

-----------------------------

附录

修饰符说明
final不能被覆写
open可以被覆写
abstract抽象
override覆盖父类方法
const
关键字说明
is检测值是否特定类型
in检测值是否在集合中
in ..检测值是否在区间中

版本发布

1.5.0 (2021-05-05)

1.4.20(2020-11-23)
1.4.10(2020-09-07)
1.4.0 (2020-08-17)

  • 接口的 SAM (Single Abstract Method) 转换
  • 显式 API 模式
  • 新的编译器
  • 尾后逗号,方便修改

1.3.72(2020-04-15)
1.3.0 (2018-10-30)

  • 协程

1.0.0 (2016-2-15)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值