Kotlin学习笔记

前言


以前用过Groovy,最近开始学习Kotlin,下面随手记录下学习的过程
说明文档
在线测试

Array 数组


定义
var arrays:Array

创建

val arrays = arrayOf(1,2,3,4)
val arrays = Array(5, { position -> (position * position).toString() })  

5代表数组长度,后面是构建函数 position是下标

ByteArray ,ShortArray , IntArray...

val arrays:IntArray = intArrayOf(1,2,3,5,6,8,10)
val arrays:LongArray = longArrayOf(1,2,3,5,6,8,10)

String


初始化

val str = "啦啦啦"

//多行文本字符串
val text = """
    for (c in "foo")
    print(c)
"""
//"|"换行的连接符  trimMargin() 去除连接符,也可以用自定义的">" 然后trimMargin(">")
val text = """
  |Tell me and I forget.
  |Teach me and I remember.
  |Involve me and I learn.
  |(Benjamin Franklin)
""".trimMargin()
//$取值 下面输出结果是:abc.length is 3  
val s = "abc"
val str = "$s.length is ${s.length}"
println(str)

//如果要输出$  下面输出结果是:$9.99
val price = """ 
    ${'$'}9.99
"""
println(price)

流程控制


其他的自己看文档
for循环

 val arrays:LongArray = longArrayOf(1,2,3,5,6,8,10)
 for ((index, value) in arrays.withIndex()) {
    println("arrays遍历的结果是:$value 下标:$index")    
 }

支持标签跳出某个循环,用@标识 例如 Mine@

//当i+j ==20的时候 跳出m1循环
m1@ for (i in 1..100) {
        m2@ for(j in 1..50)
                if(i + j == 20) {
                    break@m1
                }  else {
                    println("===========>$i")
                }
    }

class & Object


类定义

class Invoice {
  ...
}

构造方法

// 主构造方法
// constructor关键字 可以去掉   123是默认值
class Student constructor(stuId:Int = 123) { 
    val customField = stuId+100
    init {
        println("初始化Student()对象 $stuId  $customField")
    }
}

//外部调用
var stu1 = Student()
var stu2 = Student(222)

有参的构造方法

class Student constructor(stuId:Int) {
    val customField = stuId+100
    var stuName = ""
    
    init {
        println("初始化Student()对象 $stuId  $customField")
    }
    
    //次要构造方法
    constructor(name: String, stuId:Int) : this(stuId) {
        stuName = name
    }
    
}

无参的主次构造方法

class Teacher {
    var teaName = ""
    
    constructor(name: String) {
        teaName = name
        println("Teacher()对象 $teaName ")
    }
    
}

继承 ( 构造方法 )
如果父类里面还要Primary构造,子类继承的时候

//关键字 open Kotlin建的类都是final的  open就是非final
open class Person(perName:String)

class Teacher(name:String) : Person(name){
    var teaName = name
    
    init {
        println("Teacher()对象 $teaName ")
    }
    
}

没有主构造方法,继承父类如下

class MyView : View {
  constructor(ctx: Context) : super(ctx) {
    ...
  }

  constructor(ctx: Context, attrs: AttributeSet) : super(ctx, attrs) {
    ...
  }

}

继承 ( 覆写父类方法 )

open class Person(var perName:String) {
    //必须加open  不加就相当于java的private final 
    open fun test() {
        println("Person test method() $perName")
    }
    
    open fun move(){}
}

class Teacher(var teaName:String,id:Int) : Person(teaName){
    var teaId = id
    //必须加关键字override 否则编译报错
    override fun test() {
        super.test()
        println("Teacher test method() $teaName")
    }
    
    //复写父类的方法 加final 不希望子类复写这个方法
    final override move v() {}
}

//外部调用 输入结果: Teacher test method() 王老师
Teacher("王老师",189).test()

如果实现多个接口,有相同的方法,如何父类的方法

open class A {
  open fun f() { print("A") }
  fun a() { print("a") }
}

interface B {
  fun f() { print("B") } // interface members are 'open' by default
  fun b() { print("b") }
}

class C() : A(), B {
    // The compiler requires f() to be  overridden:
    override fun f() {
      super.f() // call to A.f()
      super.f() // call to B.f()
    }
 }

抽象类

abstract class SuperCls {
    abstract fun f()
}

class ExtendCls : SuperCls() {
    
    override fun f() {
        println("ExtendCls test f() ")
    }
    
}

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