不知道对与错,慢慢 change...
这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战
- 手记 | MobPush 接入总结
- Gradle 手记|盘点我使用过的 build 基本配置(不断更新中。。。
- Git 手记 | 总结个人日常开发常用到的一些命令(不断更新。。。
- Utils 手记 | Android Studio 插件整理(不断更新中...
- 手记|Kotlin 基础类型回顾
不瞒各位大佬,我想混个杯子,杯子被猫猫干碎了...
序
还记得 18 年的时候,第一次使用 Kotlin,便是借助于 Android Studio 一键转换神器将编写好的 Java 类转为 Kotlin,然后进行逐步学习,进而 “深入掌握” Kotlin 这门语言。事实证明,没有花费一定时间和功夫,对于其本身掌握程度依旧是停留表面,甚至连 Kotlin 入门级别都达不到。
正好趁着机会,认真学习下。
不得不说让人汗颜的事情,18 年参加活动得了 Kotlin 的书籍,扉页阳阳还特意写了鼓励的话,可惜,吃灰 ing...
有些事情真的不想去再次经历了,为下一次,努力吧~
感谢这个时代,站在巨人的肩膀学习~ 感谢各位大佬,期间参阅资料文末均会附上地址链接~
奉上脑图:
Kotlin 优势
这个问题在之前面试中,被问到太多次了,多的都让人不知道说些什么了。
直到现在为止,个人对于 Kotlin 的优势理解依然不变,欢迎大佬拍砖:
- Google 官方认定开发第一语言,完全兼容 Java。 官方对于 Kotlin 本身的大力投入,进一步推进 Kotlin 更为迅猛的发展。比如 Android Studio 提供的一键式 Java 转 Kotlin 插件,一定程度上降低了 Kotlin 的学习成本。
- 语言简洁性进一步带来代码量缩减。 在实现同等业务逻辑上,Kotlin 代码比 Java 代码更少。
- null 安全。 Java 逃脱不了的命运(java.lang.NullPointerException),虽然不能说是在 Kotlin 百分之百避免,有时候还是会因为不可抗因素引发相似问题,但是相对 Java 而言,Kotlin 已经很不错了。
- 结构化并发。 通过引入协程简化异步编程。
总结来说几个关键字:兼容 Java、简洁、null 安全、更方便的异步。
回顾 Java 类型
这也算是曾经的面试中常常出现的问题吧。我们一起回顾一下。
1、基本数据类型
- 八大类型:
- 数字类型:
- 整数类型:byte、short、int、long
- 浮点数类型:float、double
- 字符类型:char
- 布尔类型:boolean
- 数字类型:
2、引用数据类型
常用的 String、数组,均为引用数据类型。
3、两者间区别
基本数据类型 | 引用数据类型 |
---|---|
栈中分配 | 堆中分配 |
变量指向具体数值 | 变量指向对应内存地址 |
声明时便会分配内存空间 | 声明时只存储内存地址 |
赋值属于新的拷贝 | 赋值属于传递引用 |
== != 比较值 | == != 比较堆内存地址 |
销毁快 | 类对象需要 JVM 销毁 |
Kotlin 类型与声明
Kotlin 声明变量如下所示:
- var|val 变量名 [:类型] [=初始值]
当然,也可以如下所示:
- var|val 变量名 [=初始值]
Kotlin 的智能会为我们智能推导。其中 var 属于可变类型,val 属于不可变类型。
1、Java/Kotlin 类型表
类型 | Java | Kotlin |
---|---|---|
整数型 | int/Integer | Int |
long/Long | Long | |
byte/Byte | Byte | |
short/Short | Short | |
浮点型 | float | Float |
double | Double | |
字符型 | char | Char |
字符串型 | String | String |
Boolean 类型 | boolean | Boolean |
- 其中 Byte、Short、Int、Long 都继承自 Number 类型,所以说 Kotlin 的整数类型均为引用类型,而非基本类型。
2、举例说明
我们接下来再来举几个例子:
var num: Int = 99
var num1 = 100
var str: String = ""
var str1 = ""
var boo: Boolean = true
var bool = true
var dou: Double = 1.0
var dou1 = 1.1
var flo: Float = 1f
var flg1 = 1f
声明同一种类型,不同的方式,而个人开发过程中,更为常使用的方式为第二种。
如果有 Java 基础的童鞋,建议配合插件一块学习 Kotlin。
Kotlin 转换 Java 插件使用步骤:
- Tools -> Kotlin -> Show Kotlin bytecode
下面进一步演示一下:
类型转换
- toByte()
- toShort()
- toInt()
- toLong()
- toFloat()
- toDouble()
- toChar()
另外,Kotlin 要求不同整型的变量或值之间必须进行显式转换。
null 安全
null 安全算的上是 Kotlin 对于 Java 重大改进之一,其目的,通过更完善的规则去尽可能避免 Java 逃脱不掉的 NullPointException。
1、toXxxOrNull
var str2 = "HLQ"
var str3 = "123"
var count:Int? = str2.toIntOrNull()
var count1:Int? = str3.toIntOrNull()
println("count $count count1 $count1")
有时候业务逻辑难免会出现以上情况,String 转换 Int,而有时 str 真的为 String 时,则会发生转换异常,而 Kotlin 这种 toIntOrNull 的方式则正好进一步完善了逻辑验证,如果转换失败,则当前 value = null,从而进一步是我们的程序更健壮~
2、? 声明
如下图所示:
当我们在声明某个变量时,同时赋予其 ?,那么在对其使用前,必须进行判空,否则 IDE 直接提示如上异常信息。
判空除了常规的 if else,也包含 Kotlin 提供的另外一些骚操作,这个我们这后面再聊这事儿。
有的小伙伴说了,我就不想判空怎么办?你再骚的操作,我就不用,有啥招?
好办,强制调用 呗。
val userName:String?="HLQ_Struggle"
userName!!.length
只需要在操作变量前对其进行 !! 即可,不过这个操作有风险,还是尽可能的少用吧。
别名使用
使用语法:
- typealias 类型别名 = 已有类型
别名的出现,是为了进一步缩短较长的引用调用,如下所示,内部类:
class A{
inner class Inner
}
class B{
inner class Inner
}
// 类型别名
typealias AInner = A.Inner
typealias BInner = B.Inner
THK
Thank you Yangyang for the book~
-
疯狂 Kotlin 讲义
-
Java 编程思想 第4版