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,则它仅在声明它的文件中可见。

相关推荐
Le_ee17 分钟前
SWPUCTF 2025 秋季新生赛wp2
android
装杯让你飞起来啊1 小时前
混合练习 —— 猜数字游戏
windows·游戏·kotlin
装杯让你飞起来啊1 小时前
Kotlin 条件判断 if / when 与智能转换 smart cast
开发语言·python·kotlin
pengyu1 小时前
【Kotlin 协程修仙录 · 金丹境 · 初阶】 | 并发艺术:async/await 与并发组合的优雅之道
android·kotlin
沐言人生2 小时前
ReactNative 源码分析3——ReactActivity之初始化RN应用
android·react native
YaBingSec3 小时前
网络安全靶场WP:Grafana 任意文件读取漏洞(CVE-2021-43798)
android·笔记·安全·web安全·ssh·grafana
YF02113 小时前
彻底解决Android非SDK接口绕过限制的深度实践
android·google·app
IVEN_3 小时前
Gradle 依赖下载 403 Forbidden 修复:全局镜像配置实战
android·后端
恋猫de小郭4 小时前
Flutter 3.44 发布前夕,官方宣布 SwiftPM 将完全取代 CocoaPods
android·前端·flutter
黄林晴4 小时前
重磅发布!KMP 双端订阅支付彻底封神,一套代码搞定 iOS+Android
android·kotlin