目录
看完相关知识要记得手撸一边代码
已经开始正式开发了...之后会在这些点上更上自己理解
-
问题点:
- 如何与java混用
- 内存回收上是否还是过jvm的gc
- 相对java优化了什么
- 表达式与语句
1
2 - 高阶函数和lambda表达式
- 标签
- 库函数
- 类的构造函数和构造器
- 伴生对象
- 扩展函数
Kotlin允许开发者在不改变已有类的情况下,为某个类添加新的函数。这个特性叫做扩展函数。
/* 举一个简单的例子。如果要关闭一个I/O流,使用Java可能是写一个工具方法 */ /** * 安全关闭io流 * @param closeable */ public static void closeQuietly(Closeable closeable) { if (closeable != null) { try { closeable.close(); } catch (IOException e) { e.printStackTrace(); } } }
复制代码对Kotlin而言,可以对Closeable扩展一个函数closeQuietly()
fun Closeable?.closeQuietly() { try { this?.close() } catch (e: Throwable) { } }
复制代码之后,任何实现了Closeable接口的类,都可以使用它本身的closeQuietly()方法来关闭流。我们不再需要那个工具方法了
其实扩展并不是反射,只是利用kotlin的lambda表达式特性而已
kotlin与java的区别
- 在做kotlin时,思路应该进行转换,不再像java一样参数即对象,而是参数可以是一个规定好返回和入参的函数声明
- val <==> final
- 定义变量 var ,无初始值时需要赋予数据类型
- 定义函数 fun ,Unit返回类型的返回的是无意义的值,可以直接忽略 , 在返回类型后面加上 ? 则表示可能返回null
- 打印变量 $ ,打印集合中的某个变量 ${list[index]}
- is <==> instance of
- for in <==> 增强for
- index 为 for in 和 while 的关键字,意为序号, list.indices 为 for in 的索引集
- in 为区间检测
````
/* 使用范例 */
val list = listOf("a", "b", "c")
if (-1 !in 0..list.lastIndex) {
println("-1 is out of range")
}
if (list.size !in list.indices) {
println("list size is out of valid list indices range, too")
}
for (index in list.indices){
println(" value is ${list[index]} ")
}
````
- 不再使用 new 创建类
- when <==> switch , 除非能保证所有case都包含了,否则else是必备的
- kotlin存在一个装箱的概念,所以存在一个 === 的判断,需要注意同一性和相等性
ps: 这点与js相似,泛类型语言 - 基础类型中
较小的类型不能隐式转换为较大的类型
,所以进行转换的时候就需要用到
````
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
````
- 运算操作符
````
(只用于 Int 与 Long)
shl(bits) – 有符号左移 (Java 的 <<)
shr(bits) – 有符号右移 (Java 的 >>)
ushr(bits) – 无符号右移 (Java 的 >>>)
and(bits) – 位与z
or(bits) – 位或
xor(bits) – 位异或
inv() – 位非
````
- 数组 Array,库函数 arrayOf() 创建数组,库函数 arrayOfNulls() 创建一个指定大小,所有元素都为空的数组,另一种创建方式:
````
fun main() {
// 创建一个 Array<String> 初始化为 ["0", "1", "4", "9", "16"]
val asc = Array(5) {
j -> (j * j).toString()
}
asc.forEach { println(it) }
}
````
- @JvmOverloads
- const <==> final
- open 在kotlin允许被继承时就需要用此修饰符修饰类
- data修饰符专门用于修饰数据model类,可以继承sealed类使用data修饰的model类,在实现Parcelable做序列化的时候非常方便
- sealed修饰符专门用于修饰密封类,也就是类继承受限
- 泛型
- 对象表达式 <==> 匿名内部类
-
对象表达式 对象声明 对象表达式是在使用他们的地方立即执行(及初始化)的 对象声明是在第一次被访问到时延迟初始化的 伴生对象的初始化是在相应的类被加载(解析)时,与 Java 静态初始化器的语义相匹配
- 标准函数
kotlin相关教程及资料
- google的kotlin实例
- kotlin的官方教程(英文)
- kotlin的官方教程(中文)
- kotlin语法
- kotlin关键字和操作符
- 高效kotlin开发
- kotlin特性教程
-
jetbrain的官方教学插件
ps: 不太好用,全英文,而且答案检测貌似有问题