Kotlin学习纲要

284 阅读3分钟

Kotlin 学习纲要


基本语法

变量声明


val a: Int = 1  // 立即赋值
val b = 2   // 自动推断出 `Int` 类型
val c: Int  // 如果没有初始值类型不能省略
c = 3       // 明确赋值

静态变量使用val 关键字

val PI = 3.14

使用可空值及 null 检测

当某个变量的值可以为 null 的时候,必须在声明处的类型后添加 ? 来标识该引用可为空

fun parseInt(str: String): Int? {
    // ……
}

使用 for 循环

1.类似于 foreach 循环,conllection表示java集合,比如List,数组等

for (item in collection) {

   print(item)
}


区间迭代

if (i in 1..10) { // 等同于 1 <= i && i <= 10
    println(i)
}

逆序

for (i in 4 downTo 1) print(i)

while 和 do..while 照常使用

和java 类似

if,if else ,if..else if..else

这和java 类似

for (i in 1..3) {
    println(i)
}
for (i in 6 downTo 0 step 2) {
    println(i)
}

使用When 代理switch

when 取代了类 C 语言的 switch 操作符

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { // 注意这个块
        print("x is neither 1 nor 2")
    }
}

函数定义

带Int返回类型的函数,其中x是参数,:后面是参数返回类型,第二个:后面是方法的返回类型

fun double(x: Int): Int {
    return 2 * x
}

无返回类型值,它的返回类型是 Unit

fun double(x: Int): Unit {
    return 2 * x
}

也可以省略Unit

fun double(x: Int) {

}

函数调用和java类似

 val i=double(2)

声明

类声明由类名、类头(指定其类型参数、主构造函数等)以及由花括号包围的类体构成

  class MainActivity{

  }

如果一个类没有类体,可以省略花括号

class MainActivity{

  }

抽象类声明

open class Base {
    open fun f() {}
}

abstract class Derived : Base() {
    override abstract fun f()
}

构造函数

一类有主构造函数和次构造函数。主构造函数是类头的一部分:它跟在类名(和可选的类型参数)后。

class Person constructor(firstName: String) { ... }

主构造函数没有任何注解或者可见性修饰符, constructor 关键字可省略

class Person(firstName: String) { ... }

创建类的实例

Kotlin 并没有 new 关键字,使用var来定义。

val invoice = Invoice()

val customer = Customer("Joe Smith")

在 Kotlin 中的一个类可以有一个主构造函数和一个或多个次构造函数。主构造函数是类头的一部分:它跟在类名(和可选的类型参数)后。

嵌套类与内部类

类可以嵌套在其他类中,嵌套类也就是是static 类,不可以访问外部引用

class Outer {
    private val bar: Int = 1
    class Nested {
        fun foo() = 2
    }
}

内部类

类可以标记为 inner 以便能够访问外部类的成员。内部类会带有一个对外部类的对象的引用

class Outer {
    private val bar: Int = 1
    inner class Inner {
        fun foo() = bar
    }
}

val demo = Outer().Inner().foo() // == 1

匿名内部类

使用object 关键字

    private var  handler: Handler= object : Handler() {
        override fun handleMessage(msg: Message?) {
            super.handleMessage(msg)
        }
    }

类的继承

在 Kotlin 中所有类都有一个共同的超类 Any,这对于没有超类型声明的类是默认超类:

class Example // 从 Any 隐式继承

要声明一个显式的超类型,我们把类型放到类头的冒号之后

open class Base(p: Int)

class Derived(p: Int) : Base(p)

类上的 open 标注与 Java 中 final 相反,它允许其他类从这个类继承。 默认情况下,在 Kotlin 中所有的类都是 final

接口声明

使用interface 定义接口,允许方法有默认实现

interface MyInterface {
    fun bar()
    fun foo() {
        // 可选的方法体
    }
}

接口种的属性

使用val 定义属性,在接口中声明的属性要么是抽象的,要么提供访问器的实现

interface MyInterface {
    val prop: Int // 抽象的


接口继承

interface Named {
    val name: String
}

interface Person : Named {
    val firstName: String
    val lastName: String

    override val name: String get() = "$firstName $lastName"
}

范型定义

java 类似

Android 相关

1.如何使用findViewById()

2.设置监听

#Java 与Kotlin 优劣势 Kotlin 支持类型推断,没有 Java 那样的啰嗦。