kotlin语法(上)

一.介绍与安装
   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 时 跳出循环
    }
相关推荐
Smart-佀1 小时前
Android初学必备:选Kotlin 还是Java ?
android·android studio·安卓
XuanRanDev1 小时前
【编程语言】Kotlin快速入门 - 泛型
开发语言·kotlin
普通网友1 小时前
Android kotlin Jetpack mvvm 项目
android·开发语言·kotlin
大耳猫1 小时前
Android Kotlin 协程详解
android·kotlin·协程
木易 士心1 小时前
Go、Rust、Kotlin、Python 与 Java 从性能到生态,全面解读五大主流编程语言
java·golang·rust
Crogin1 小时前
快速简单入门Kotlin——基础语法(第一天)
android·开发语言·kotlin
qq_336313931 小时前
java基础-set系列集合
java·开发语言·python
U***l8321 小时前
【Spring】IDEA中创建Spring项目
java·spring·intellij-idea
好好沉淀1 小时前
IDEA 报错:You aren‘t using a compiler supported by lombok (1分钟解决方案)
java·spring·intellij-idea