开始kotlin语言的学习,kotlin 对于Android 来讲还是一门很重要的语言,一起来学习下吧。
简单知识了解:
// var tv_content: TextView? = null//定义一个可空类型 强大的类型推断
// https://blog.csdn.net/xiaodouyaer624/article/details/82706568
// val 相当于 final 因为val不存在set方法
// lateinit var tv_content: TextView //lateinit 关键字延时加载
// @Override 注解变成了 override关键字
// 一个类可继承 open 关键字 和 abstract 关键字
// companion 关键字 伴生对象 == static
// ? null类型判断 如果为空就不会在调用后边的 tv_content?.setText()
// !! 已经确定不是空,可以放心使用 tv_content!!.setText()
// NPE 空指针异常 《解决空指针问题》
// Int Int? = int Intenger
// 在 java 里局部变量没有默认值
// 在 kotlin 都没有默认值包括全局变量和局部变量
// 字符串拼接 ${变量名} 或 $变量名
/*
字符串换行 <三个引号的作用>
"""
第一行
第二行
第三行
中间不需要 \n
"""
*/
// 构造方法
// 一个类后边家(),意思是调用了,这个类的无参构造方法
// 一个类存在 主构造函数 和 次构造函数 次构造必须实现主构造函数
// 字段与属性问题
// 字段 = 属性 + get() + set()
// 区别:字段会保存状态,属性不会保存状态需要通过幕后字段 Filed 保存状态
// 帮助理解 幕后字段? 和 幕后属性?
/*
幕后字段
定义:在Kotlin中定义一个普通属性时,会为该属性生成一个field,getter,和setter,其中这个field就称为幕后字段(backing field)
何时会生成幕后字段?
对于var|val属性
Kotlin自动生成了 setter |getter 产生幕后字段
重写了 setter |getter 不产生幕后字段
在重写了的 setter |getter中使用了field 产生幕后字段
幕后属性
使用private修饰的属性,就是幕后属性
延迟初始化属性lateinit
Kotlin要求所有属性必须由程序员显示初始化
定义时初始化
在构造器中赋值初始化
所以例如Activity里面的控件,都要用lateinit修饰
*/
// Object 等同于 Object
// String? 根 Any?
// String 根 Any --> Any?
/*
PESC Producer exdends Consumer super
取 存
java 中 ? exdends ? super
kotlin 中 out in
kotlin 中 协变 逆变
*/