可空性(避免空指针异常)

/*
*这个函数的参数代表传入一个String类型变量的实例,这代表它不可以为空
*/
fun a(str:String){
println(str)
} //这样调用a()会在编译期就显示错误,因为a()的参数不可以是null
>>>a(null) //这会报错 /*
*我们可以使用 ?来手动的标注哪些变量可以为空值
*/
fun a(str:String?){
println(str)
} /*
*一旦某个变量被标注为可空,那么这个变量将不能使用一些方法,如.length()
*/
fun a(str:String?){
println(str.length) //会报错
} /*
*可以使用if来判断,这样编译器会根据上下文来得知变量不为空,但是代码会冗长
*/
fun a(str:String?){
if(str!=null){
println(str.length) //会报错
}
} /*
*安全调用运算符“ ?. ”,如果str!=null,那么会正确调用str的length方法;如果str为空,那么调用不会成立,整个表达式的值为null,所以打印null
*/
fun a(str:String?){
println(str?.length)
} /*
*Elvis运算符 “ ?: ” 如果对象为null时,用冒号后的值代替原本的值
*/
fun a(str:String?):Int{
//若不为空,返回字符串长度,若为空,返回-1
return str?.length?:-1
}

安全转换 " as? "

/*
*尝试把值转换成给定的类型,如果不合适,则返回null
*/
fun a(str:String?):Int{
println(str as? Int)
return 0
}
>>>a("1")
null

非空断言" !! "

  断言一个数据是非空的,如果是空值,就抛空指针异常。

let函数

/*
*如果str是非空的,那么调用lambda中的代码块
*如果是null,那么什么也不会发生
*/
fun a(str:String?):Int{
str?.let {
println(str.length)
}
return 0
}

延迟初始化 lateinit

/*
*在一个类声明一个属性,如果它需要在其他方法中单独初始化,可以声明一个可空类型变量使它等于null,但是这样每次使用这个变量都需要判断空值。
*另一个方法是使用lateinit延迟初始化属性
*/
class A{
lateinit var name:String fun a1(){
print(name) //这里可以直接使用,不需要空值判断。如果为null,那么会报错----lateinit property name has not been initialized
}
}

Kotlin中的数据类型

  kotlin中的Int同样可以调用方法,就像Java中的包装类那样。但Java中存在基本数据类型是因为 数值类型的保存速度 比引用类型的保存速度要快。

  所以kotlin中并没有将Int之类的类型完全等于Java中的包装类。

  kotlin在编译时,会尽量将数值变量编译成数值类型,如果数值变量被“?”指定为可空,或者是作为集合的参数,那么将会被编译成包装类。

Any 根类型

  Java中的Object类型是所有引用类型(除八种基本数据类型)的父类。

  在Kotlin中,与之想类似的是Any类型。

  但有一些不同的地方,Any是所有非空类型的超类,其包括Int,Boolean等。而可空类型则可以用“Any?”。

Unit:Kotlin中的Void

  Java中的方法如果没有返回值,则使用void修饰。Kotlin中与之对应的是Unit。

  方法中的Unit可以省略,但如果作为参数传入则不能省 fun a(value:Int -> Unit){ } .

返回值类型为nothing的方法代表这个方法永远不能正常返回,如一个死循环的方法

基本数据类型的数组使用像IntArray这样的特殊类来表示,它的参数会被编译成数值类型

Kotlin学习(5)类型系统的更多相关文章

  1. kotlin 学习感受

    目录 kotlin 学习感受 特点 优点 屎一样的缺点 总结 kotlin 学习感受 直白的说..很不好,像屎一样,本来对此抱有很大的期望和好感度,但经过一整天的学习,完全失望了,这门语言中间有各种的 ...

  2. Kotlin 学习笔记(一)

    (Kotlin 学习笔记的文档结构基本按照 Java 核心技术一书的目录排列) 基本程序设计结构 数据类型 数字 类型 宽度 Double 64 Float 32 Long 64 Int 32 Sho ...

  3. Kotlin学习笔记(9)- 数据类

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步! Kotlin学习笔记(1)- 环境配置 Kotlin学习笔记(2)- 空安 ...

  4. Kotlin学习快速入门(7)——扩展的妙用

    原文地址: Kotlin学习快速入门(7)--扩展的妙用 - Stars-One的杂货小窝 之前也模模糊糊地在用这个功能,也是十分方便,可以不用继承,快速给某个类增加新的方法,本篇便是来讲解下Kotl ...

  5. Kotlin学习第一课:从对比Java开始

    1. 介绍 今年初,甲骨文再次对谷歌所谓的安卓侵权使用Java提起诉讼,要求后者赔偿高达90亿美元.随后便传出谷歌因此计划将主力语言切换到苹果主导的Swift,不过这事后来没了跟进. 但谷歌在这两天的 ...

  6. kotlin学习-初次见面

    第一次相识 最近看了很多介绍kotlin的文章.怀着好奇心改造了之前用java写的一个工具jar包.功能不是很复杂,类也只有几个,却足足写3个小时.期间一边看教程,一边写,有一种找回原来第一次写代码的 ...

  7. kotlin学习笔记-异常好玩的list集合总结

    不积跬步无以至千里,不积小流无以成江海 先看看Kotlin中for循环的遍历 fun testList(){ var StringVal = "12_12_13_15_a_b_c_d_yu_ ...

  8. kotlin学习(二)——类

    Kotlin中的类遵循一个简单的结构.尽管与Java有一点细微的差别.你可以使用try.kotlinlang.org在不需要一个真正的项目和不需要部署到机器的前提下来测试一些简单的代码范例. 1. 怎 ...

  9. kotlin学习三:初步认识kotlin(第二篇)

    上一章熟悉了kotlin基本的变量和函数声明,并明白了如何调用函数.本章再来看一些其他有用的东西 包括: 1. kotlin代码组织结构 2. when语法 3. 循环迭代语法 4. try表达式 1 ...

随机推荐

  1. 拉链法解决hashtable冲突问题

    拉链法解决冲突.拉链法解决冲突的做法是将所有的相同Hash值的key放在一个链表中,比如key3和key14在hash之后都是0,那么在数组的键为0的地方存储这两个值,形式是链表.如果不能理解我的文字 ...

  2. 游标定位:Cursor类

    关于 Cursor Cursor 是每行的集合. 使用 moveToFirst() 定位第一行. 你必须知道每一列的名称. 你必须知道每一列的数据类型. Cursor 是一个随机的数据源. 所有的数据 ...

  3. HDU 6651 Final Exam

    hdu题面 Time limit 2000 ms Memory limit 524288 kB OS Windows 吐槽 比赛时候晕死了-- 解题思路 先留坑 公式法 https://blog.cs ...

  4. PCL智能指针疑云 <三> 智能指针作为函数的传值参数和传引用参数

    一 函数的参数传递可以简单分类为“传值”和“传引用”. 声明函数时,形参带引用“&”,则函数调用时,是把实参所在的内存直接传给函数所开辟的栈内存.在函数内对形参的修改相当于对实参也进行修改. ...

  5. 【转】C语言中数组名和指针的区别

    注:本文转自http://www.cnblogs.com/furaibo/archive/2010/03/19/1689710.html 魔幻数组名 请看程序(本文程序在WIN32平台下编译): #i ...

  6. WKWebView使用指南|功能丰富的JXBWKWebView

    github地址:JXBWKWebView,如果觉得项目不错可以点个star支持一下,谢谢~ 前言 目前iOS系统已经更新到iOS11,大多数项目向下兼容最多兼容到iOS8,因此,在项目中对WebVi ...

  7. Spring下面的@Transactional注解的讲解

    摘自: https://www.cnblogs.com/xiohao/p/4808088.html Spring下面的@Transactional注解标志的讲解 最近在开发中对Spring中的事务标记 ...

  8. 3、maven导入外部自定义jar包

    有些时候我们自己有一些jar包需要导入到我们的仓库中,然后在maven项目里的pom.xml文件加入这些jar包的依赖即可使用这些jar包了 1.确保行执行mvn -v没有问题 2.把需要引入的jar ...

  9. PHP操作json

    输出json文件中文处理 <?php $json_array = array(); // 1.转换为json字符串(不自动转换为unicode编码) if (version_compare(PH ...

  10. maven 配置参数详解!

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...