美文网首页
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