kotlin基础【1】

kt主函数:

main函数是kotlin程序的入口函数,是计算机运行起来第一个默认找的第一个运行的函数

Kotlin 复制代码
fun main(args:Array<String>){
	println("hello world")
}

主函数各部分功能介绍:

kotlin常用数据类型:

可以通过设置最大最小值,查看这些类型的范围

Kotlin 复制代码
fun main(args:Array<String>){
	val aByte:Byte = Byte.MAX_VALUE
	val bByte:Byte = Byte.MIN_VALUE
	println("Byte 最大值"+aByte);
	println("Byte 最大值"+bByte);

	val aLong:Long = Long.MAX_VALUE
	val bLong:Long = Long.MIN_VALUE
	println("Long 最大值"+aLong);
	println("Byte 最大值"+bLong);
}

注意:kotlin相比于Java 没有 int 和 Integer,只有int类型

Kotlin 复制代码
fun main(args:Array<String>){
	saveLog(6)
}
fun saveLog(logLevel:Int){
	println("LogLevel:$logLevel")
}

此外还有:

1. 字符类型

  • Char :表示单个字符,用单引号 ' 包裹,如 'a''中'。与 Java 不同,Kotlin 的 Char 不能直接当作数字使用。

2. 布尔类型

  • Boolean :只有 truefalse 两个值,用于逻辑判断。
Kotlin 复制代码
fun main(args:Array<String>){
	val check = checkAge(76)
	println("年龄是否大于65周岁:$check")
}
fun checkAge(age:Int):Boolean{
	return age>65
}

3. 数组类型

  • Array :通用数组类型,可存储任意类型元素,如 Array<Int>Array<String> (主函数就使用的是这个)
Kotlin 复制代码
fun main(args:Array<String>){
	println("hello world")
}
  • 基本类型专用数组:为避免自动装箱开销,提供了 IntArrayLongArrayBooleanArray 等,分别对应基本类型数组。

4. 集合类型(位于 kotlin.collections 包)(这是后话)

  • List :有序集合,元素可重复,如 listOf(1, 2, 3)(不可变)、mutableListOf(1, 2, 3)(可变)。
  • Set :无序集合,元素不可重复,如 setOf(1, 2, 3)(不可变)、mutableSetOf(1, 2, 3)(可变)。
  • Map :键值对集合,键唯一,如 mapOf(1 to "a", 2 to "b")(不可变)、mutableMapOf(1 to "a")(可变)。

kotlin智能变量推断

编译器能够自动根据变量的赋值语句推断出变量类型,

Kotlin 复制代码
val name = "Alice"  // 推断为 String
val age = 30        // 推断为 Int
val height = 1.75   // 推断为 Double
val isStudent = true // 推断为 Boolean

kt变量类型经过确定之后,可以强制转换,这是后话。未转换之前如果给类型赋超过其自身范围的会报错

显式声明变量类型

显式类型声明通过在变量名后添加 : 类型 来实现:

Kotlin 复制代码
val name: String = "Alice"
var age: Int = 30
val height: Double = 1.75
val isStudent: Boolean = true

kt的函数格式

无返回值

返回值类型为unit 相当于java的void,也可以省略不写,如主函数就是省略不写

省略不写

Kotlin 复制代码
fun main(args:Array<String>){
	println("hello world")
}
Kotlin 复制代码
// 显式声明 Unit
fun printMessage(message: String): Unit {
    println(message)
}

有返回值

Kotlin 复制代码
fun 函数名(参数列表): 返回类型 {
    // 函数体
    return 返回值
}

返回Int

Kotlin 复制代码
fun sum(a: Int, b: Int): Int {
    return a + b
}

返回String

Kotlin 复制代码
fun getGreeting(name: String): String {
    return "Hello, $name!"
}

返回Boolean

Kotlin 复制代码
fun getA(score: Int): Boolean{
    return score>90
}

返回Char

Kotlin 复制代码
fun getCharAtIndex(str: String, index: Int): Char {
    return if (index in str.indices) str[index] else ' '//获取指定位置的字符
}

练习

请编写函数,函数名为sayHello 方法返回值是String类型,一个参数是String类型名称为name

请编写函数,函数名为checkAge方法的返回值是Boolean类型,一个参数是整数类型名称为age

请编写函数,函数名为saveLog方法没有返回值一个参数是整数类型名称为logLevel

Kotlin 复制代码
fun main(args:Array<String>){
	val helloName = sayHello("张三")
	println(helloName)

	val check = checkAge(76)
	println("年龄是否大于65周岁:$check")
	saveLog(6)
}
fun sayHello(name:String):String{
	println("name = "+name)
	return "hello,$name"
}
fun checkAge(age:Int):Boolean{
	return age>65
}
fun saveLog(logLevel:Int){
	println("LogLevel:$logLevel")
}

KT字符串是否相等

Kotlin 复制代码
fun main(args:Array<String>){
    val str1 ="Andy"
	val str2 = "Andy"
	val str3 ="andy"

	println(str1==str2)
	println(str1.equals(str2))
	println(str1.equals(str3,true))
	println(str1.equals(str3,false))
}
Kotlin 复制代码
true
true
true
false

前2个和java基本相同,在安卓基本使用

java 复制代码
boolean isEqual1 = str1.equals(str2);
Kotlin 复制代码
println(str1.equals(str3,true))
println(str1.equals(str3,false))

指的是true 无视大小写,false,区分大小写

日志打印

Kotlin 复制代码
fun main(args:Array<String>){
    val age =75
	checkAge(age)
}
fun checkAge(age:Int){
    if(age>65){
		println("${age:这是一个老人")
	}else{
		println("$age:这是一个年轻人")
	}
}

在上述代码中,"age:这是一个老人"和 "{age}:这是一个老人"`两种写法都是正确的,效果完全一致。

当变量是一个简单的标识符(如单个变量名 age)时,age 和 {age} 没有区别,都会正确解析变量值

当需要解析更复杂的表达式(如 user.name 或 {user.name},或 {age + 10})时,必须使用 \`{}` 包裹 在你的代码中,由于只是简单的变量 `age`,两种写法均可。`"age:这是一个老人"\` 更简洁,是更常见的写法;而 \`{age}` 写法在这种场景下属于冗余但合法的语法。 所以你的原始代码写法是完全正确的,不需要修改为 `${age}` 形式。

函数非空判断

Kotlin 复制代码
fun main(args:Array<String>){
    val str1 ="张三"
	val str2 = "Andy"
	val str3 ="andy"

	println(heat(str1))
    println(heat(null))
	println(heat1(null))

}
fun heat(matter:String):String{
    return "打倒$matter"
}
fun heat1(matter:String?):String{
    return "打倒$matter"
}

函数参数为,表示不接受null值,

Kotlin 复制代码
fun heat(matter:String):String{
    return "打倒$matter"
}

因此会报错

Kotlin 复制代码
println(heat(null))

表示函数能够接受空值

Kotlin 复制代码
fun heat1(matter:String?):String{
    return "打倒$matter"
}

输出:

Kotlin 复制代码
打倒null

when语句

Kotlin 复制代码
when (变量/表达式) {
    条件1 -> 执行语句1
    条件2 -> 执行语句2
    条件3, 条件4 -> 执行语句3  // 多个条件匹配同一结果
    in 范围 -> 执行语句4        // 检查是否在指定范围内
    !in 范围 -> 执行语句5       // 检查是否不在指定范围内
    is 类型 -> 执行语句6        // 检查类型
    else -> 执行语句7           // 所有条件都不匹配时执行(相当于default)
}
Kotlin 复制代码
fun main(args: Array<String>) {
    val score1 = 59
    val score2 = 60
    val score3 = 100
    val score4 = 75  // 测试中间值
    val score5 = 90  // 测试中间值

    println("$score1 分: ${gradeStudent(score1)}")
    println("$score2 分: ${gradeStudent(score2)}")
    println("$score3 分: ${gradeStudent(score3)}")
    println("$score4 分: ${gradeStudent(score4)}")
    println("$score5 分: ${gradeStudent(score5)}")
}

fun gradeStudent(score: Int): String {
    val str = when(score) {
        in 0..59 -> "不及格"    // 0到59分
        60 -> "及格"            // 正好60分
        in 61..80 -> "良好"     // 61到80分
        in 81..99 -> "优秀"     // 81到99分
        100 -> "满分"           // 正好100分
        else -> "异常"          // 超出0-100范围的分数
    }
    return str
}
相关推荐
侠客行03175 小时前
Mybatis连接池实现及池化模式
java·mybatis·源码阅读
蛇皮划水怪5 小时前
深入浅出LangChain4J
java·langchain·llm
子兮曰5 小时前
OpenClaw入门:从零开始搭建你的私有化AI助手
前端·架构·github
吴仰晖5 小时前
使用github copliot chat的源码学习之Chromium Compositor
前端
1024小神5 小时前
github发布pages的几种状态记录
前端
老毛肚7 小时前
MyBatis体系结构与工作原理 上篇
java·mybatis
风流倜傥唐伯虎8 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
不像程序员的程序媛8 小时前
Nginx日志切分
服务器·前端·nginx
Yvonne爱编码8 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚8 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言