Kotlin初级(2)- - - 空安全.md
空类型、空安全
变量的定义
Kotlin中的变量修饰符只有两个
- val修饰的变量不能重新被赋值
- var修饰的变量可以被重新赋值
var修饰的变量不可为null,val修饰的可为null
val a: Int? = null
var b: Int
变量a在使用的时候需要判断改变量是否为null,变量b则不需要了,因为这个变量永远不会为null
可空类型的判断
if else
val str: String? = null
if(str == null){}else {}
使用?.判断
如果可空变量为null时,返回null
这种用法大量用于链式操作,能有效避免空指针异常
var str: String? = null
print(str?.length)
链式调用
print(str?.length?.plus(5)?.minus(10))
函数中使用可空类型
当一个函数有返回值时,如果返回的值为可空类型,那么方法的返回值类型后面也要加?
操作符
let
- let操作符的作用:当使用符号?.验证的时候忽略掉null
- let的用法: 变量?.let{}
val arrTest : Array<Int?> = arrayOf(1,2,null,3,null,5,6,null)// 传统写法
for (index in arrTest) {if (index == null){continue}println("index => $index")
}// let写法
for (index in arrTest) {index?.let { println("index => $it") }
}
?:操作符
当我们定义了一个可空类型的变量时,如果该变量不为空,则使用,繁殖使用另外一个不为空的值
val testStr : String? = nullvar length = 0// 例: 当testStr不为空时,输出其长度,反之输出-1// 传统写法
length = if (testStr != null) testStr.length else -1// ?: 写法
length = testStr?.length ?: -1println(length)
Evils操作符
Evils其实不是一个操作符,而是evil的复数,而evil的意思在这里可以理解为屏蔽、安全的操作符,这样的操作符有三种:
- ?: 这个操作符表示在判断一个可空类型时,会返回一个我们自己设定好的默认值
- !! 这个操作符在判断一个可空类型时,会抛出空指针异常
- as? 这个操作符表示为安全的类型转换
!! 操作符
!! 操作符可谓是给爱好空引用异常的开发者使用,因为在使用一个可空类型变量时,在改后面加上!!操作符,会显示抛出的空指针异常
as?操作符
其实这里是指as操作符,表示类型转换,如果不能正常转换的情况下使用as?操作符。当使用as操作符的使用不能正常的转换的情况下会抛出类型转换(ClassCastException)异常,而使用**as?**操作符则会返回null,但是不会抛出异常
总结
- 项目中会抛出空指针NullPointerException的情况
- 在可空类型变量的使用时,用了!! 操作符
- 显示抛出空指针 throw NullPointerException()
- 外部Java代码导致的
- 对于初始化,有一些数据不一致(如一个未初始化的this用于构造函数的某个地方)
- 项目中会抛出类型转换ClassCastException的情况
- 在类型转换中使用了as操作符
- 使用了toString()、toInt()等方法不能转换
- 外部Java代码导致
- 尽量避免使用的操作符
- 尽可能的不要使用!!操作副,多使用**?:、?.操作符,以及let{}**函数
- 尽可能的使用as?操作副去替换掉as
- 在不确定是否可以安全转换的情况下不使用**toString()**等方法
Kotlin初级(2)- - - 空安全.md相关推荐
- Kotlin——初级篇(六):空类型、空安全、非空断言、类型转换等特性总结
在我们熟知的Java中,定义一个变量可以默认不赋值,因为Java的系统会给我们默认赋一个默认值,并且Java可定义一个赋值为null的变量,这样在使用这个变量的时候都会去显示判断该变量是否为null. ...
- Kotlin——初级篇(二):变量、常量、注释
在Kotlin中的变量.常量以及注释多多少少和Java语言是有着不同之处的.不管是变量.常量的定义方式,还是注释的使用.下面详细的介绍Kotlin中的变量.常量.注释的使用.以及和Java的对比. 如 ...
- 【Spring Boot 实战开发】第2讲 Kotlin类型系统与空安全
幻灯片1.png Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.在 Java 开发领域的诸多著名框架:Spring ...
- Kotlin中的空判断
Kotlin中的空判断 前言 字符串空判断 空字符串:"" 纯空格字符串:" " null字符串:null 值为null字符串:"null" ...
- Kotlin——初级篇(一):最详细的环境搭建
众所周知,Kotlin出来已经良久了.Kotlin有着众多优势,不管是用于Android开发中,还是Java开发,都能缩减很大的代码量,大大提高了工作效率.而小生本人也是才从忙碌的个工作中抽身出来,有 ...
- 【Kotlin】变量简介 ( 可空类型 | lateinit | 初始化判定 | 非空类型 | !! 与 ? 修饰符 | ?= ?. ?: 运算符 | 抽象属性变量)
文章目录 I . Kotlin 变量总结 II . Kotlin 非空变量 III . 非空变量不能赋空 IV . lateinit 关键字 V . lateinit 初始化判定 VI . Kotli ...
- 《Kotlin项目实战开发》 第3章 类型系统与可空类型
2019独角兽企业重金招聘Python工程师标准>>> 第3章 类型系统与可空类型 跟Java.C和C ++ 一样, Kotlin也是"静态类型编程语言". 通常 ...
- Kotlin中的一些判空操作、空安全
前言 很久没有更新博客了,其实并不是因为太忙,也不是遇到的问题不多,是迷茫了,不知道怎么去写,总感觉自己一定会去好好的写文章(哈哈幻想中),但是从来没有动过笔,因为写不好,能力不够.但是还是要去动笔呀 ...
- Kotlin——中级篇(二): 属性与字段详解
在前面的章节中,详细的为大家讲解到了Kotlin中对类的类的定义.使用.初始化.初始化.类继承等内容,但是在一个类中,几乎上是不可能不出现属性与字段(field)的,这一篇文章就为大家奉上Kotlin ...
最新文章
- rtsp发送主流和辅流
- 使用Linq Xml 来读取一个目录下所有的文件并保存为Xml文档
- python培训出来的有公司要吗-参加Python培训到底需要学什么?好程序员
- Excel 技巧篇-公式实现在指定范围内生成指定小数位的随机数
- Linux搭建oracle数据库
- html表情选择器,原生JS写的emoji表情选择器
- XML学习笔记(三)
- oracle hibernate 主键,oracle hibernate 主键自增
- 1021个位数字统计
- [转载] [转载] python 中NumPy和Pandas工具包中的函数使用笔记(方便自己查找)
- HTML 区块、内联元素
- Android开发实践:设计安卓应用以计算BMI指数
- java LPT1_Java 未知异常 求解
- 国标GB/T28181流媒体服务器安防4G摄像头互联网直播EasyGBS如何实现H265网页直播的?
- 深富策略:罕见巨额成交量背后蕴含深意
- java操作excel方法_Java实现操作excel表格的方法
- 服务器存储系统的模式,服务器的三种存储方式
- dwg文件怎么打开呢?dwg是啥呢?
- Android pm命令详解
- qqwry.dat的数据结构解释