一.介绍与安装
kotlin在2016年正式发布,用于解决java语言在编码效率和代码质量方面存在的问题。并且与java语言完全兼容。适用于Android、web后端开发等多种场景。
1.1 环境配置:
---需要先安装java环境
---下载zip文件:https://github.com/JetBrains/kotlin/releases/tag/v2.2.20
---解压文件,添加环境变量,如C:\kotlinc\bin
---验证安装成功
C:\Users\hushaoren>kotlinc -version
info: kotlinc-jvm 2.2.20 (JRE 24.0.2+12-54)
1.2 IDEA的安装
---这里推荐使用IntelliJ IDEA
---打开IntelliJ IDEA,创建一个 kotlin项目,自动在src目录下生成一个Main.kt的文件,代码如下:
fun main() {
val name = "Kotlin"
//TIP 当文本光标位于高亮显示的文本处时按 <shortcut actionId="ShowIntentionActions"/>
// 查看 IntelliJ IDEA 建议如何修正。
println("Hello, " + name + "!")
for (i in 1..5) {
//TIP 按 <shortcut actionId="Debug"/> 开始调试代码。我们已经设置了一个 <icon src="AllIcons.Debugger.Db_set_breakpoint"/> 断点
// 但您始终可以通过按 <shortcut actionId="ToggleLineBreakpoint"/> 添加更多断点。
println("i = $i")
}
}
--可以看到Kotlin 文件以 .kt 为后缀
** --val与var声明的区别:**
--val:不可变变量(相当于Java中的final),初始化后不可修改,必须在声明时或构造器中完成初始化,是线程安全的,无需担心并发修改问题。
--var:可变变量,支持多次修改,适用于需要动态更新的场景,需注意多线程环境下的数据一致性。
1.3 包
下图是创建一个Infra基础设施包,包中创建了一个Utils.kt的文件,这个文件中定义了多个类,如FileUtils类等

下面是在Mian.kt文件中导入Infra包,调用该包中的FileUtils类,如下所示
import Infra.*
fun main() {
val fu= FileUtils()
二.数据类型
2.1 数据类型定义
class BaseDataType {
// Byte: 8 位,范围从 -128 到 127。
val byteValue:Byte = 127
//Short: 16 位,范围从 -32,768 到 32,767
val shortValue:Short = 32767
//Int: 32 位,范围从 -2^31 到 2^31 - 1
val intValue:Int = 2147483647
//Long: 64 位,范围从 -2^63 到 2^63 - 1
val longValue:Long = 9223372036854775807L
// float浮点数类型
val floatValue:Float = 3.14F
// double浮点数类型
val doubleValue:Double = 3.141592653589793
// 字符类型
val charValue:Char = 'A'
// 布尔类型
val booleanValue:Boolean = true
// 字符串类型
val stringValue: String = "Hello, Kotlin!"
// 数组类型
val intArray: IntArray = intArrayOf(1, 2, 3, 4, 5)
val longArray: LongArray = longArrayOf(1, 2, 3, 4, 5)
val floatArray: FloatArray = floatArrayOf(1.0f, 2.0f, 3.0f)
val doubleArray: DoubleArray = doubleArrayOf(1.0, 2.0, 3.0)
val charArray: CharArray = charArrayOf('A', 'B', 'C')
val booleanArray: BooleanArray = booleanArrayOf(true, false, true)
val stringArray: Array<String> = arrayOf("a", "b", "c")
fun display(){
// println: Byte Value: 127
println("Byte Value: $byteValue")
//println: Int Array: 1, 2, 3, 4, 5
println("Int Array: ${intArray.joinToString()}")
//println: String Array: a, b, c
println("String Array: ${stringArray.joinToString()}")
}
}
长整型以大写的 L 结尾:123L16 进制以 0x 开头:0x0F2 进制以 0b 开头:0b00001011注意:8进制不支持
2.2 数据类型比较
比较两个数字: ==、!=、<、>、<= 和 >=
类型转换:比较不同数据类型时会自动进行类型转换。例如:a 是 Int 类型,而c是Double类型,Kotlin会自动将a转换为Double类型进行比较。
相等性:Kotlin 中 == 是值的比较,而 === 是引用相等性比较,即对象是否是同一个实例。
2.3 类型转换
不能进行显式转换,如将Byte类型值赋给一个 Int 变量
val b: Byte = 1
val i: Int = b // 错误
//正确方法使用toInt()
val i: Int = b.toInt() //ok
有toByte()、toShort()、toInt()、toLong()、toFloat()、toDouble()、toChar()
2.4 布尔
常用的 && 与、 || 或、 ! 逻辑非
2.5 字符串模板
模板表达式以美元符()开头,如println("Int Array: {intArray.joinToString()}")
三. 条件控制
3.1 if表达式
基本语法与java、c#一样, 语法糖有如下写法
可以把 IF 表达式的结果赋值给一个max变量如下所示:
val max = if (a > b) {
print("Choose a")
a
} else {
print("Choose b")
b
}
也不需要像Java那种有一个三元操作符,简写如下:
//三元表达式格式语法
val c = if (condition) a else b
// 三元表达式
var a = 1
var b = 2
val c = if (a>=b) a else b
//C#格式
int c= a>=b ? a: b
使用区间 in 运算符来检测某个数字是否在指定区间内,区间格式为 x..y
val x = 5
val y = 9
if (x in 1..8) {
println("x 在区间内")
}
//输出结果为:x 在区间内
3.2 when表达式
//When相当于java、c#的switch,when里面的else相当于switch中的default
val x: Int=1
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> { // 注意这个块
print("x 不是 1 ,也不是 2")
}
}
//输出:x == 1
//检测一个值在(in)或者不在(!in)
val x: Int=5
when (x) {
in 1..10 -> print("x is in the range")
!in 10..20 -> print("x is outside the range")
else -> print("none of the above")
}
//输出 x is in the range
//多个分支需要用相同的方式处理,则可以把多个分支条件放在一起,用逗号分隔
val x:Int=1
when (x) {
0, 1 -> print("x == 0 or x == 1")
else -> print("otherwise")
}
//输出:x == 0 or x == 1
//is一个特定类型的值
val x:Int=10
val value=when (x) {
is Int ->x-5
else -> print("otherwise")
}
println(value)//输出:5
四.循环控制
4.1For循环 格式:for (item in collection) print(item)
//获取集合项中的每个值
val items = listOf("apple", "banana", "kiwi")
for (item in items) {
println(item)
}
//获取集合项中索引,从0开始
for (index in items.indices) {
println("item at $index is ${items[index]}")
}
4.2 while 与do while循环
与java、c#语法一样
//while循环,在里面每次减一 输出5,4,3,2,1
var x = 5
while (x > 0) {
println(x--)
}
//do while循环在里面每次减一 输出5,4,3,2,1
var y = 5
do {
println(y--)
} while(y>0)
4.3 返回和跳转
continue与break的用法与java\c#一样
//输出1,2,3,4,5,6
for (i in 1..10) {
if (i==3) continue // i 为 3 时跳过当前循环,继续下一次循环
println(i)
if (i>5) break // i 为 6 时 跳出循环
}