kt主函数:
main函数是kotlin程序的入口函数,是计算机运行起来第一个默认找的第一个运行的函数
fun main(args:Array<String>){
println("hello world")
}
主函数各部分功能介绍:
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类型
fun main(args:Array<String>){
saveLog(6)
}
fun saveLog(logLevel:Int){
println("LogLevel:$logLevel")
}
此外还有:
1. 字符类型
- Char:表示单个字符,用单引号
'
包裹,如'a'
、'中'
。与 Java 不同,Kotlin 的 Char 不能直接当作数字使用。
2. 布尔类型
- Boolean:只有
true
和false
两个值,用于逻辑判断。 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> (主函数就使用的是这个)
。 fun main(args:Array<String>){ println("hello world") }
- 基本类型专用数组:为避免自动装箱开销,提供了
IntArray
、LongArray
、BooleanArray
等,分别对应基本类型数组。
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智能变量推断
编译器能够自动根据变量的赋值语句推断出变量类型,
val name = "Alice" // 推断为 String
val age = 30 // 推断为 Int
val height = 1.75 // 推断为 Double
val isStudent = true // 推断为 Boolean
kt变量类型经过确定之后,可以强制转换,这是后话。未转换之前如果给类型赋超过其自身范围的会报错
显式声明变量类型
显式类型声明通过在变量名后添加 : 类型 来实现:
val name: String = "Alice"
var age: Int = 30
val height: Double = 1.75
val isStudent: Boolean = true
kt的函数格式
无返回值
返回值类型为unit 相当于java的void,也可以省略不写,如主函数就是省略不写
省略不写
fun main(args:Array<String>){
println("hello world")
}
// 显式声明 Unit
fun printMessage(message: String): Unit {
println(message)
}
有返回值
fun 函数名(参数列表): 返回类型 {
// 函数体
return 返回值
}
返回Int
fun sum(a: Int, b: Int): Int {
return a + b
}
返回String
fun getGreeting(name: String): String {
return "Hello, $name!"
}
返回Boolean
fun getA(score: Int): Boolean{
return score>90
}
返回Char
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
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字符串是否相等
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))
}
true
true
true
false
前2个和java基本相同,在安卓基本使用
boolean isEqual1 = str1.equals(str2);
println(str1.equals(str3,true))
println(str1.equals(str3,false))
指的是true 无视大小写,false,区分大小写
日志打印
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}` 形式。
函数非空判断
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值,
fun heat(matter:String):String{
return "打倒$matter"
}
因此会报错
println(heat(null))
表示函数能够接受空值
fun heat1(matter:String?):String{
return "打倒$matter"
}
输出:
打倒null
when语句
when (变量/表达式) {
条件1 -> 执行语句1
条件2 -> 执行语句2
条件3, 条件4 -> 执行语句3 // 多个条件匹配同一结果
in 范围 -> 执行语句4 // 检查是否在指定范围内
!in 范围 -> 执行语句5 // 检查是否不在指定范围内
is 类型 -> 执行语句6 // 检查类型
else -> 执行语句7 // 所有条件都不匹配时执行(相当于default)
}
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
}