马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
变量
在 Kotlin 中,可以通过关键字 val 或 var 声明变量,后跟变量名称。
使用 val 关键字声明只能赋值一次的变量。这些是不可变的、只读的局部变量,初始化后不能重新赋值。
- fun main() {
- val a = 1
- val b: Int = 2
- println("a = $a, b = $b") // a = 1, b = 2
- }
复制代码- fun main() {
- val a = 1
- val b: Int = 2
- // a = 2 // error
- // b = 3 // error
- }
复制代码 使用 var 关键字声明可以重新赋值的变量。这些是可变变量,您可以在初始化后更改它们的值。
- fun main() {
- var a = 1
- var b: Int = 2
- a = 2
- b = 3
- println("a = $a, b = $b") // a = 2, b = 3
- }
复制代码 Kotlin 支持类型推断,可以自动识别已声明变量的数据类型。在声明变量时,可以省略变量名后的类型。
只能在初始化变量后使用它们。您可以在声明时初始化变量,也可以先声明变量稍后再初始化。在第二种环境下,必须指定命据类型。
- fun main() {
- val a = 1
- val b: Int
- b = 3
- println("a = $a, b = $b") // a = 1, b = 3
- }
复制代码- fun main() {
- val a: Int
- // println("a = $a") // error
- }
复制代码 可以在顶层声明变量。
变量可以独立于类和函数在文件的顶层声明。
- // 顶层变量。
- val name = "bob"
- var age = 25
- fun main() {
- println("name = $name, age = $age") // name = bob, age = 25
- age = 26 // 修改顶层变量。
- println("update age = $age") // update age = 26
- }
复制代码 创建类和实例
可以通过 class 关键字定义类。
- class Person(val name: String, var age: Int) {
- fun greet() {
- println("name = $name, age = $age")
- }
- }
- fun main() {
- val person = Person("xiaoming", 25)
- person.greet() // name = xiaoming, age = 25
- }
复制代码 类的属性可以直接在主构造函数中声明,也可以在类体中定义。
- class Person(val name: String, var age: Int) { // 在主构造函数中声明属性。
- var address: String = "" // 在类体中定义属性。
-
- fun greet() {
- println("$name, $age, $address")
- }
- }
- fun main() {
- val person = Person("xiaoming", 25)
- person.address = "beijing"
- person.greet() // xiaoming, 25, beijing
- }
复制代码- class Rectangle(val height: Double, val length: Double) {
- val perimeter = (height + length) * 2
- }
- fun main() {
- val rect = Rectangle(2.0, 3.0)
- println(rect.perimeter) // 10.0
- }
复制代码 类之间的继续通过冒号 : 声明。
类默认是 final 的。要使类可继续,请将其标志为 open。
- open class Animal(val name: String) { // 标记为 open 以允许继承。
- fun makeSound() {
- println("$name make sound")
- }
- }
- class Dog(name: String): Animal(name) {
- fun bark() {
- println("$name bark")
- }
- }
- fun main() {
- val dog = Dog("xiaohuang")
- dog.makeSound() // xiaohuang make sound
- dog.bark() // xiaohuang bark
- }
复制代码- open class Shape
- class Rectangle(val height: Double, val length: Double): Shape() {
- val perimeter = (height + length) * 2
- }
复制代码 注释
Kotlin 支持单行注释和多行注释。
多行注释可以嵌套。
- /* .............
- .............
- .............
- */
复制代码- /* .............
- .............
- /* .............
- .............
- .............
- */
- .............
- .............
- */
复制代码 字符串模板
- var a = 1
- // 模板中的简单名称。
- val s1 = "a is $a"
- a = 2
- // 模板中的任意表达式。
- val s2 = "${s1.replace("is", "was")}, but now is $a"
复制代码 条件表达式
- fun maxOf(a: Int, b: Int): Int {
- if (a > b) {
- return a
- } else {
- return b
- }
- }
复制代码 if 也可以用作表达式。
- fun maxOf(a: Int, b: Int) = if (a > b) a else b
- val a = 10
- val b = 20
- val max = if (a > b) a else b
复制代码 循环
- val items = listOf("apple", "banana", "kiwifruit")
- for (item in items) {
- println(item)
- }
复制代码- val items = listOf("apple", "banana", "kiwifruit")
- var index = 0
- while (index < items.size) {
- println("item at $index is ${items[index]}")
- index++
- }
复制代码 when 表达式
- fun describe(obj: Any): String =
- when (obj) {
- 1 -> "One"
- "Hello" -> "Greeting"
- is Long -> "Long"
- !is String -> "Not a string"
- else -> "Unknown"
- }
复制代码 范围
使用 in 和 !in 操纵符检查值是否在范围内。
- val x = 10
- val y = 9
- if (x in 1 .. y + 1) {
- println("fits in range")
- }
复制代码- 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")
- }
复制代码 遍历范围。
- fun main() {
- for (x in 1 .. 5) {
- print(x) // 12345
- }
-
- println()
-
- for (x in 1 .. 10 step 2) {
- print(x) // 13579
- }
-
- println()
-
- for (x in 9 downTo 0 step 3) {
- print(x) // 9630
- }
- }
复制代码 集合
遍历集合。
- fun main() {
- val items = listOf("aaa", "bbb", "ccc")
- // aaa
- // bbb
- // ccc
- for (item in items) {
- println(item)
- }
- }
复制代码 使用 in 操纵符检查集合是否包含某个对象。
- fun main() {
- val items = listOf("aaa", "bbb", "ccc")
- // bbb
- when {
- "ddd" in items -> println("ddd")
- "bbb" in items -> println("bbb")
- }
- }
复制代码 可空值和空值检查
当可能为 null 值时,引用必须显式标志为可空。可空类型的名称以 ? 末端。
- fun main() {
- val str: String = "abc"
- val int: Int? = str.toIntOrNull()
-
- // null
- if (int == null) {
- println("null")
- } else {
- println(int)
- }
- }
复制代码 在空值检查后,可空类型会自动转换为非空类型。
- fun main() {
- val x: Int? = 5
- val y: Int? = 10
- if (x != null && y != null) {
- val xx: Int = x
- val yy: Int = y
- val result: Int = xx * yy
- println(result) // 50
- }
- }
复制代码- fun main() {
- val x: Int? = 5
- println(x is Int?) // true
- if (x != null) {
- println(x is Int) // true
- }
- }
复制代码 类型检查和自动类型转换
is 和 !is 操纵符检查表达式是否是某个类型的实例。
如果对不可变的局部变量或属性进行了特定类型的检查,则无需显式转换它,编译器会自动将其转换为目标类型。
- fun main() {
- check("1223")
- }
- fun check(obj: Any) {
- println(obj is Any) // true
-
- if (obj !is Int) {
- println(obj is Any) // true
- }
-
- if (obj is String) {
- println(obj is String) // true
- println(obj.length) // 4
- }
-
- println(obj is Any) // true
- }
复制代码- fun main() {
- check(1223)
- }
- fun check(obj: Any) {
- println(obj is Any) // true
- if (obj !is String) {
- println(obj is Any) // true
- }
- if (obj is Int) {
- println(obj is Int) // true
- println(obj - 1222 == 1) // true
- }
- println(obj is Any) // true
- }
复制代码- fun getStringLength(obj: Any): Int? {
- if (obj is String && obj.length > 0) {
- return obj.length
- }
- return null
- }
复制代码- fun main() {
- check(1223)
- }
- fun check(int: Int) {
- // int = 1 // int 是 val 不可再次赋值。
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |