Kotlin 2.1.0 入门教程(三)
变量
在 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 不可再次赋值。
}
原文地址:https://blog.csdn.net/qq_19661207/article/details/145208214
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!