Kotlin最简单的入门教程——关键字,操作符,异常,空指针
2017-06-15 10:48
330 查看
1 区间表达式
区间表达式由具有操作符形式 .. 的 rangeTo 函数辅以 in 和 !in 形成。if (i in 1..10) { // 等同于 1 <= i && i <= 10 println(i) }
倒序迭代数字 downTo() 函数
for (i in 4 downTo 1) print(i) // 输出“4321”
能否以不等于 1 的任意步长迭代数字? 当然没问题, step() 函数有助于此
for (i in 1..4 step 2) print(i) // 输出“13” for (i in 4 downTo 1 step 2) print(i) // 输出“42”
要创建一个不包括其结束元素的区间,可以使用 until 函数:
for (i in 1 until 10) { // i in [1, 10) 排除了 10 println(i) }
2 类型的检查与转换
类型的检查is 操作符或其否定形式 !is 来检查对象是否符合给定类型,相当于java中的 instanceof
if (obj is String) { print(obj.length) } if (obj !is String) { // 与 !(obj is String) 相同 print("Not a String") } else { print(obj.length) }
智能转换
1----------- fun demo(x: Any) { if (x is String) { print(x.length) // x 自动转换为字符串 } } 2----------------- // `||` 右侧的 x 自动转换为字符串 if (x !is String || x.length == 0) return // `&&` 右侧的 x 自动转换为字符串 if (x is String && x.length > 0) { print(x.length) // x 自动转换为字符串 } 3---------------- when (x) { is Int -> print(x + 1) is String -> print(x.length + 1) is IntArray -> print(x.sum()) }
请注意,当编译器不能保证变量在检查和使用之间不可改变时,智能转换不能用。 更具体地,智能转换能否适用根据以下规则:
val 局部变量——总是可以;
val 属性——如果属性是 private 或 internal,或者该检查在声明属性的同一模块中执行。智能转换不适用于 open 的属性或者具有自定义 getter 的属性;
var 局部变量——如果变量在检查和使用之间没有修改、并且没有在会修改它的 lambda 中捕获;
var 属性——决不可能(因为该变量可以随时被其他代码修改)。*
“不安全的”转换操作符 as
val x: String = y as String
“安全的”(可空)转换操作符 as?
val x: String? = y as? String
3 空安全 ?
Kotlin 的类型系统旨在从我们的代码中消除 NullPointerException。NPE 的唯一可能的原因可能是显式调用 throw NullPointerException()
使用了下文描述的 !! 操作符
外部 Java 代码导致的
对于初始化,有一些数据不一致(如一个未初始化的 this 用于构造函数的某个地方)
var a: String = "abc" a = null // 编译错误 var b: String? = "abc" b = null // ok
4 异常
Kotlin 中所有异常类都是 Throwable 类的子孙类。 每个异常都有消息、堆栈回溯信息和可选的原因。使用 throw-表达式来抛出异常。
throw MyException("Hi There!")
使用 try-表达式来捕获异常。
try { // 一些代码 } catch (e: SomeException) { // 处理程序 } finally { // 可选的 finally 块 }
可以有零到多个 catch 块。finally 块可以省略。 但是 catch 和 finally 块至少应该存在一个。
最后欢迎加入Kotlin QQ群,一起讨论学习:
欢迎关注 微信公号
相关文章推荐
- Kotlin最简单的入门教程——基础类型(二)
- Kotlin最简单的入门教程——集合
- Kotlin最简单的入门教程——类和继承
- Kotlin最简单的入门教程——委托
- Kotlin最简单的入门教程——可见性修饰符,扩展,数据类,密封类
- Kotlin最简单的入门教程——与Java互相调用
- Kotlin最简单的入门教程——神秘的Lambda
- Kotlin最简单的入门教程——环境
- Kotlin最简单的入门教程——基础类型(一)
- 【Go入门教程2】基本构成元素:标识符(identifier)、关键字(keyword 25个)、字面量(literal)、分隔符(delimiter)、和 操作符(operator)
- Ant的入门级教程(1)?ANT 蚂蚁是什么?带有简单使用。
- Ajax+PHP简单基础入门实例教程
- Ajax+PHP简单入门教程
- Dojo QuickStart 快速入门教程 (4) 简单的测试框架
- Access入门简单教程
- php简单入门视频教程
- PS入门教程:简单实现照片切换动画
- JavaFx中文入门教程--JavaFx操作符
- delphi指针简单入门(转)
- Ajax PHP简单入门教程代码