Kotlin初步

146 阅读2分钟

参考学习:www.w3cschool.cn/uwota/uwota…

变量声明

声明可读可写变量:

var age: Int18

声明只读变量:

val name: String = "Hello, Kotlin!"

声明对象:

val user: User = User()

类型推断

var age = 18
val name = "Hello, Kotlin!"
val user = User()

函数声明

fun main() {

}
fun sum(x: Int, y: Int): Int {
    return x + y 
}

继承类/实现接⼝

继承类和实现接⼝都是⽤的 : ,如果类中没有构造器 ( constructor ),需要在⽗

类类名后⾯加上 () :

class MainActivity : BaseActivity(),View.OnClickListener{
}

空安全

不可空类型

val editText : EditText

可空类型

val editText : EditText?

调⽤符

  • !! 强⾏调⽤符
  • ?. 安全调⽤符

lateinit 关键字

  1. lateinit 只能修饰 var 可读可写变量
  2. lateinit 关键字声明的变量的类型必须是「不可空类型」
  3. lateinit 声明的变量不能有「初始值」
  4. lateinit 声明的变量不能是「基本数据类型」
  5. 在构造器中初始化的属性不需要 lateinit 关键字

类型判断

  • is 判断属于某类型
  • !is 判断不属于某类型
  • as 类型强转,失败时抛出类型强转失败异常
  • as? 类型强转,但失败时不会抛出异常⽽是返回 null

获取 Class 对象

  • 使⽤ 类名::class 获取的是 Kotlin 的类型是 KClass
  • 使⽤ 类名::class.java 获取的是 Java 的类型

构造器

无参构造

class User {
    constructor()
}

有参构造--如果我们在构造器主动调⽤了了⽗类构造,那么在继承类的时候就不能在类的后⾯

加上⼩括号

constructor(context: Context) : this(context, null)
// 主动调⽤⽤了⽗类的构造器
constructor(context: Context, attr: AttributeSet?) :super(context, attr)

Any 和 Unit

  • Any Kotlin 的顶层⽗类是 Any ,对应 Java 当中的 Object ,但是⽐Object 少了 wait()/notify() 等函数
  • Unit Kotlin 中的 Unit 对应 Java 中的 void

数组

使⽤ arrayof() 来创建数组,基本数据类型使⽤对应的 intArrayOf() 等

val a = arrayOf(1, 2, 3)

静态函数和属性

  • 顶层函数
  • object
  • companion object

其中,「顶层函数」直接在⽂件中定义函数和属性,会直接⽣成静态的,在 Java 中

通过「⽂件名Kt」来 访问。

object 和 companion object 都是⽣成单例例对象,然后通过单例对象访问

函数和属性的。

字符串

val number = 100
val text = "向你转账${number}元。"
// 如果只是单⼀的变量,可以省略掉 {}
val text2 = "向你转账$number元。"
val s = """
我是第⼀⾏
我是第⼆⾏
我是第三⾏
""".trimIndent()