参考学习:www.w3cschool.cn/uwota/uwota…
变量声明
声明可读可写变量:
var age: Int = 18
声明只读变量:
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 关键字
- lateinit 只能修饰 var 可读可写变量
- lateinit 关键字声明的变量的类型必须是「不可空类型」
- lateinit 声明的变量不能有「初始值」
- lateinit 声明的变量不能是「基本数据类型」
- 在构造器中初始化的属性不需要 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()