Kotlin 2.1.0 入门教程(一)

程序入口点

Kotlin 应用程序的入口点是 main 函数。

kotlin 复制代码
fun main() {
    println("Hello, World!")
}

另一种形式的 main 函数可以接受可变数量的 String 参数。

kotlin 复制代码
fun main(args: Array<String>) {
    println(args.contentToString())
}

打印到标准输出

print 将其参数打印到标准输出,但不会自动换行。

kotlin 复制代码
fun main() {
    // Hello World
    print("Hello")
    print(" ")
    print("World")
}

println 会打印其参数并添加换行符,因此接下来打印的内容会显示在下一行。

kotlin 复制代码
fun main() {
    // Hello
    // World
    println("Hello")
    println("World")
}

从标准输入读取

readln() 函数从标准输入读取内容。该函数将用户输入的整行内容作为字符串读取。

可以将 println()、readln() 和 print() 函数结合使用,以打印消息来请求并显示用户输入。

kotlin 复制代码
println("Enter any word: ")
val yourWord = readln()
print("You entered the word: ")
print(yourWord)

要处理字符串以外的数据类型,可以使用转换函数,如 .toInt()、.toLong()、.toDouble()、.toFloat() 或 .toBoolean(),将输入转换为相应的类型。可以读取多个不同数据类型的输入,并将每个输入存储在变量中。

kotlin 复制代码
// 输入 12
val myNumber = readln().toInt()
println(myNumber) // 12

// 输入 345
val myDouble = readln().toDouble()
println(myDouble) // 345.0

// 输入 true
val myBoolean = readln().toBoolean()
println(myBoolean) // true

这些转换函数假定用户输入的是目标数据类型的有效表示。例如,使用 .toInt() 将 "hello" 转换为整数会导致异常,因为该函数期望字符串输入是一个数字。

要读取由分隔符分隔的多个输入元素,可以使用 .split() 函数并指定分隔符。以下代码示例从标准输入读取内容,根据分隔符将输入拆分为元素列表,并将列表中的每个元素转换为特定类型。

kotlin 复制代码
// 输入 1 2 3
val numbers = readln().split(' ').map { it.toInt() }
println(numbers) // [1, 2, 3]

// 输入 4,5,6
val doubles = readln().split(',').map { it.toDouble() }
println(doubles) // [4.0, 5.0, 6.0]

可以使用 .toIntOrNull() 函数将用户输入从字符串安全地转换为整数。如果转换成功,该函数会返回一个整数;但如果输入不是有效的整数表示,它会返回 null。

kotlin 复制代码
// 输入 Hello
val wrongInt = readln().toIntOrNull()
println(wrongInt) // null

// 输入 13
val correctInt = readln().toIntOrNull()
println(correctInt) // 13

readlnOrNull() 函数有助于安全处理用户输入。

readlnOrNull() 函数从标准输入读取内容,并在输入结束时返回 null,而 readln() 在这种情况下会抛出异常。

readlnOrNull() 是一种更安全的输入读取方式,尤其是在处理可能为空或结束的输入时。

包定义

包的定义应放在源文件的顶部。

kotlin 复制代码
package my.demo

import org.example.Message

目录和包不需要一一对应:源文件可以任意放置在文件系统中。

虽然通常会将 Kotlin 源文件放在与包名匹配的目录结构中,但这并不是强制要求,源文件可以自由地存放在文件系统的任何位置。

kotlin 复制代码
package org.example

fun printMessage() { /*...*/ }

class Message { /*...*/ }

源文件中的所有内容都包含在此包中。因此,在上面的示例中,printMessage() 的完整名称是 org.example.printMessage,而 Message 的完整名称是 org.example.Message。

如果没有指定包,则文件中的所有内容将属于默认包,且默认包没有名称。

默认导入

每个 Kotlin 文件都会默认导入一些包。

某些常用的包会被自动导入到每个源文件中,无需手动导入即可直接使用它们提供的功能。

kotlin 复制代码
import kotlin.*
import kotlin.annotation.*
import kotlin.collections.*
import kotlin.comparisons.*
import kotlin.io.*
import kotlin.ranges.*
import kotlin.sequences.*
import kotlin.text.*

根据目标平台的不同,还会导入一些额外的包。

kotlin 复制代码
// JVM
import java.lang.*
import kotlin.jvm.*

// JS
import kotlin.js.*

导入

除了默认导入之外,每个文件还可以包含自己的导入指令。

您可以导入单个名称。

kotlin 复制代码
import org.example.Message // 现在可以直接访问 Message 而无需限定符。

或者导入一个作用域中的所有可访问内容:如包、类、对象等。

kotlin 复制代码
import org.example.* // org.example 中的所有内容都变为可访问的。

如果出现名称冲突,可以使用 as 关键字对冲突的实体进行重命名以消除歧义。

kotlin 复制代码
import org.example.Message // Message 是可访问的。
import org.test.Message as TestMessage // TestMessage 代表 org.test.Message。

import 关键字不仅限于导入类,还可以用它来导入其他声明。

  • 顶层函数和属性

  • 在对象声明中声明的函数和属性

  • 枚举常量

顶层声明的可见性

如果顶层声明被标记为 private,则它仅在声明它的文件中可见。

相关推荐
千里马学框架3 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone3 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc3 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo3 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077003 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
ai2work3 天前
ch23 综合复刻:从零做一个最小可用版本(capstone)
kotlin
其实防守也摸鱼3 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
ai2work3 天前
ch21 签名、校验与发版
kotlin
AFinalStone3 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui