kotlin学习笔记记录

定义变量

var k:String?=null

后面的?表示可以赋值为null

 mHandler?.post()

表示mHandler为空就不执行后面的

mHandler!!.post()

表示mHandler为空就抛出异常

lateinit的作用:延迟初始化
具体来讲,这个关键字告诉编译器,我无法声明的时候就初始化,但是我保证我在使用前一定会初始化,你就别给我检查了。

lateinit var homeImage: ImageVie

但是需要注意的是,lateinit 不能使用在基础类型上,基础类型包括

  • byte, short, int, long
  • float, double
  • char
  • boolean

Koltin中属性在声明的同时也要求要被初始化,否则会报错。 例如以下代码:

private var name2: String? = null //不报错
private var name0: String //报错

lateinit var只能用来修饰类属性,不能用来修饰局部变量,并且只能用来修饰对象,不能用来修饰基本类型(因为基本类型的属性在类加载后的准备阶段都会被初始化为默认值)。
lateinit var的作用也比较简单,就是让编译期在检查时不要因为属性变量未被初始化而报错。
Kotlin相信当开发者显式使用lateinit var 关键字的时候,他一定也会在后面某个合理的时机将该属性对象初始化的(然而,谁知道呢,也许他用完才想起还没初始化)。
bylazy

by lazy要求属性声明为val,即不可变变量,在java中相当于被final修饰。

这意味着该变量一旦初始化后就不允许再被修改值了(基本类型是值不能被修改,对象类型是引用不能被修改)。{}内的操作就是返回唯一一次初始化的结果。by lazy可以使用于类属性或者局部变量。

lazy()是接受一个 lambda 并返回一个 Lazy <T> 实例的函数,返回的实例可以作为实现延迟属性的委托: 第一次调用 get() 会执行已传递给 lazy() 的 lambda 表达式并记录结果, 后续调用 get() 只是返回记录的结果。
 

kotlin 关键字 :open  final和abstract

https://www.jianshu.com/p/5d21f05d3cee

声明一个带open方法的open类

引用《Kotlin实战》当中的例子。

// 这个类是open的:其他可以继承它
open class RichButton : Clickable {

   // 这个函数是final的:不能在子类中重写它
    fun disable(){}

    // 这个函数是open的:可以在子类当中重写
    open fun animate(){}

    // 这个函数重写了一个open函数并且它本身同样是open
    override fun click() {}
}

interface Clickable {
    fun click()
}

上面的例子我们可以知道,如果我们重写了一个基类或者接口的成员,重写了的成员同样是open的。如果你不想让子类重写你的实现,可以在显式的将重写的函数标注未final

open class RichButton : Clickable{
   // 在这里的“final”并没有被删减是因为没有“final”的“override”是open的
   final override fun click() {}

}

abstract关键字声明抽象类

Kotlin声明抽象类的关键字和Java一样也是abstract关键字。代码举例

// 抽象类:不能创建它的实例
abstract class Animated{
    // 这个函数是抽象函数,没有实现必须在子类当中重写
    abstract fun animate()

    // 抽象类中的非抽象函数并不是默认open的,但是可以标准open
    open fun stopAnimating(){}

    fun animateTwice(){}
}

类访问修饰符的意义

修饰符相关作用标注
final不能被重写类中成员默认使用
open可以被重写需要显式标明
abstract必须被重写只能在抽象类使用:抽象成员不能实现
override重写父类或者接口中的成员如果没有使用final表明,重写成员默认是open的



作者:阿博聊编程
链接:https://www.jianshu.com/p/5d21f05d3cee
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

is运算符相当于java中的instanceof,用来判断当前类型是不是对应的类型(可以是对应的类型的子类),说的很抽象,上代码看一下。

fun main() {
    val str = "helloWorld"
    println(str is String)
}
输出:true

2.!is是is的否定形式(就是效果跟is相反),上代码看一下

fun main() {
    val x = 10
    println(x !is Int)
}
输出:false

3.as是相当于是显示类型转换(就是强制类型转换),转换成功就转换成功,转换失败会报错

4.as?比as安全一点,转换成功就转换成功,转换失败会返回null
————————————————
版权声明:本文为CSDN博主「心脏dance」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lgz0921/article/details/119913909

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值