美文网首页
Kotlin日记

Kotlin日记

作者: 霁逸lei | 来源:发表于2020-12-21 16:59 被阅读0次

    1.Kotlin语言中使用"object"修饰静态类 "companion object"修饰静态方法

    kotlin主构造函数不能包含任何代码,相关初始化代码放入init代码块
    init{} -> 构造 -> companion object
    kotlin中需要将静态变量放入companion object 代码块
    companion object {
            const val TAG = "permissions"
        }
    

    2.const val和val区别
    可变变量定义:var 关键字
    不可变变量定义:val 关键字,只能赋值一次的变量(类似Java中final修饰的变量)

    object myObject {
        const val constObject: String = "constObject"
        val normalObject: String = "normalObject"
    }
    

    打开Android studio 点击 Tools->Kotlin->Show Kotlin ByteCode

    public final class com/example/kotlin/myObject {
    
    
      // access flags 0x19
      public final static Ljava/lang/String; constObject = "constObject"
      @Lorg/jetbrains/annotations/NotNull;() // invisible
    
      // access flags 0x1A
      private final static Ljava/lang/String; normalObject = "normalObject"
      @Lorg/jetbrains/annotations/NotNull;() // invisible
    
      // access flags 0x11
      public final getNormalObject()Ljava/lang/String;
      @Lorg/jetbrains/annotations/NotNull;() // invisible
       L0
        LINENUMBER 144 L0
        GETSTATIC com/example/kotlin/myObject.normalObject : Ljava/lang/String;
        ARETURN
       L1
        LOCALVARIABLE this Lcom/example/kotlin/myObject; L0 L1 0
        MAXSTACK = 1
        MAXLOCALS = 1
      ......
    }
    
    • const val 可见性为public final static,可以直接访问。
    • val 可见性为private final static,并且val 会生成方法getNormalObject(),通过方法调用访问。

    3.类型后面加?表示可为空
    var age: String? = "23"

    4.修饰符

    abstract    // 抽象类  
    final       // 类不可继承,默认属性
    enum        // 枚举类
    open        // 类可继承,类默认是final的
    annotation  // 注解类
    
    private    // 仅在同一个文件中可见
    protected  // 同一个文件中或子类可见
    public     // 所有调用的地方都可见
    internal   // 同一个模块中可见
    

    5.循环

    fun cases(obj: Any) {
        when (obj) {
            1          -> print("One") //如果obj的值为1
            "Hello"    -> print("Greeting") // 如果obj的值为hello
            is Long    -> print("Long") // 如果obj的类型是Long类型
            !is String -> print("Not a string") // 如果obj的类型不属于String类型
            else       -> print("Unknown") // 默认,相当于switch的default
        }
    }
    
    if (x in 1..y-1) { //1..y-1表示1到y-1的范围
        print("OK")
    }
    for (i in 1..100) { ... }  //  1到100范围
    for (i in 1 until 100) { ... } // 半开范围,不包括100,相当于[1,100)
    for (x in 2..10 step 2) { ... } // 每次夸2,内容为2,4,6,8,10
    for (x in 10 downTo 1) { ... } // 返序
    if (x in 1..10) { ... }
    

    6.with、Boolean?

    val b: Boolean? = ...
    if (b == true) {
        ...
    } else {
        // `b` 是false或者为null
    }
    
    class Turtle {
        fun penDown()
        fun penUp()
        fun turn(degrees: Double) 
        fun forward(pixels: Double)
    }
    val myTurtle = Turtle()
    // 如果正常的写
    myTurtle.penDOwn()
    for(i in 1..4) {
        myTurtle.forward(100.0)
        myTurtle.turn(90.0) 
    }
    myTurtle.penUp() 
    // 使用with将对象实例引用,代码减少很多
    with(myTurtle) { 
        penDown()
        for(i in 1..4) {
            forward(100.0)
            turn(90.0) 
        }
        penUp() 
    }
    

    相关文章

      网友评论

          本文标题:Kotlin日记

          本文链接:https://www.haomeiwen.com/subject/qtbxwhtx.html