Kotlin 笔记

  1. a === b 当且仅当 a 和 b 指向同一个对象时求值为 true。

  2. 如果为语句加上双感叹号:!! 那么则表示如果为空的话会抛出空指针异常错误。

  3. Inline 关键字让高阶函数效率更高,特别是有循环时。

  4. 如果使用关键字当做变量,那么使用``包裹就可以了

  5. Kotlin可变参数:vararg。

  6. 延迟初始化关键字:lateinit

  7. if区间判断:if (x in 1..8) {
    println("x 在区间内")
    }

  8. when、if都可以拥有返回值

  9. Kotlin所有的类都是Any的子类,Any和java中object相似,但两者并不是同一个类。

  10. 构造函数的参数可以使用高阶函数。

  11. 尽量不要在Activity中出现静态内部类,这样会导致Activity无法回收。

  12. with()表达式很好用,可以多次调用某对象的方法与属性。

  13. 比类的构造函数更早加载的是类中的init代码块。

  14. by lazy委托修饰类似于java中的synchronized。这个属性只在kotlin1.1之后才有。注意:只初始化一次!

  15. val numFun: (a: Int, b: Int) -> Int
    它不是一个普通的变量,它必须指向一个函数,并且函数签名必须一致。

  16. 直接使用lambda表达式:
    val sumLambda = {a: Int, b: Int -> a + b}
    sumLambda(1, 2)
    sumLambda是函数变量。

  17. 将函数赋值给函数变量:
    fun sum(a: Int, b: Int): Int {
    return a + b
    }
    var numFun: (a: Int, b: Int) -> Int
    numFun = ::sum

  18. Kotlin有synchronized关键字,我们也可以使用Lock与ReentrantLock以及信号量等等来保证线程安全。

  19. kotlin中annotation关键字是注解的类的关键字。

  20. 类可以标记为 inner ,可以使用外部类的对象创建内部类,不能直接使用外部类的类名直接进行创建内部类。如果不加inner,可以使用外部类的类名直接进行创建内部类,但是不能通过对象创建内部类。

  21. 参数可以使用if语句或者when语句补充,java中不允许这么做,但是在Kotlin中是可以的。

  22. by lazy关键字只针对于val常量属性,如果是var则会报错。

  23. 双层循环,循环次数低的放在外层,高的放在里层,这样会提高运行速度。

  24. 关键字
    companion object静态关键字
    constructor 构造函数关键字
    override 重写方法关键字
    lateinit 延迟加载
    inline 内敛属性
    open 表明类可以被继承
    基本数据类型:Boolean Byte Short Int Long Float Double Char
    init 初始化
    by lazy 延迟加载
    vararg变长参数
    set和get的真实操作值field。
    annotation class Fancy 意思是修饰一个类为注解。

  25. user?.let {
    println(it.name)
    }
    相当于如果user不为空则执行输出,let关键字。

  26. 如果新建一个对象,特别是实体类,只为了初始化几个参数然后当本身当参数传进了方法里,那么建议使用
    fun tt(text: Text) {}
    fun text() {
    tt(object : Text() {
    init {
    setAge("")
    }
    })
    }
    这种用法

  27. also和apply是kotlin自己的方法,使用它们可以对类做一些初始化,also使用it,apply使用this。

  1. 任何时候,如果我们只需要“一个对象而已”,并不需要特殊超类型,那么我们可以简单地写:
    val adHoc = object {
    var x: Int = 0
    var y: Int = 0 }

  2. infix表达式让程序更加的简洁
    // 给 Int 定义扩展
    infix fun Int.shl(x: Int): Int { ......
    }
    // 用中缀表示法调用扩展函数 1 shl 2
    // 等同于这样
    1.shl(2)

  3. 使用高阶函数时尽量使用内联函数关键字:inline ,这样会大幅度提升性能。

  4. is操作符否定形式!is.

  5. 比较两个对象是否引用相等===,比较两个值是否相等==。

  6. 在 Kotlin 中使用 JNI
    要声明一个在本地(C 或 C++)代码中实现的函数,你需要使用 external 修饰符来标记它:
    external fun foo(x: Int): Double 其余的过程与 Java 中的工作方式完全相同。

  7. 静态static就是缓存,Token就是以全局静态保存在服务器的。然后静态HashMap列表将token存入缓存。

你可能感兴趣的:(Kotlin 笔记)