Kotlin
变量和函数
变量
-
val 常量 --java final变量
-
var 可变变量 --java 非final
永远优先使用val来声明一个变量,而当val没有办法满足你的需求时再使用var。这样设计出来的程序会更加健壮,也更加符合高质量的编码规范。
函数
-
fun largerNumber(num1: Int, num2: Int): Int { return max(num1, num2) }
当一个函数中只有一行代码时,Kotlin允许我们不必编写函数体,可以直接将唯一的一行代码写在函数定义的尾部,中间用等号连接即可。
比如我们刚才编写的largerNumber()函数就只有一行代码,于是可以将代码简化成如下形式:
fun largerNumber(num1: Int, num2: Int): Int = max(num1, num2)
进一步简化
fun largerNumber(num1: Int, num2: Int) = max(num1, num2)
逻辑控制
顺序
条件
-
if
-
fun largerNumber(num1: Int, num2: Int): Int { var value = 0 //重新赋值 用var if (num1 > num2) { value = num1 } else { value = num2 } return value }
-
//if语句可以有返回值 是if每个条件最后一行代码的返回值 fun largerNumber(num1: Int, num2: Int): Int { val value = if (num1 > num2) { num1 } else { num2 } return value }
-
fun largerNumber(num1: Int, num2: Int): Int { return if (num1 > num2) { num1 } else { num2 } }
-
fun largerNumber(num1: Int, num2: Int)= if (num1 > num2) { num1 } else { num2 } }
-
fun largerNumber(num1: Int, num2: Int)= if (num1 > num2) num1 else num2
-
-
when条件语句
匹配值 -> { 执行逻辑 } 逻辑只有一行时 {}可省
-
fun getScore(name: String) = when (name) { "Tom" -> 86 "Jim" -> 77 "Jack" -> 95 "Lily" -> 100 else -> 0 }
-
类型匹配
fun checkNumber(num: Number) { when (num) { is Int -> println("number is Int") is Double -> println("number is Double") else -> println("number not support") } }
-
when后不带参数
//名字以Tom开头的成绩都是86 fun getScore(name: String) = when { name.startsWith("Tom") -> 86 name == "Jim" -> 77 name == "Jack" -> 95 name == "Lily" -> 100 else -> 0 }
-
循环
-
for - in 循环
- 升序区间
**val range = 0…10 ** 闭区间 [0, 10]
fun main() { for (i in 0..10) { println(i) } }
val range=0 until 10 左闭右开 [0,10)
for (i in 0 until 10 step 2) for-i循环中i = i + 2
-
降序区间 downTo
fun main() { for (i in 10 downTo 1) //创建了一个[10,1] { println(i) } }
面向对象编程
类与对象
class Person {
var name = ""
var age = 0
fun eat()
{
println(name+" is eating.He is "+age+" years old.")
}
}
继承与构造函数
- 继承 两件事
- 在 Person前加关键字open 使Person类可以被继承 在Kotlin中任何一个非抽象类默认都是不可以被继承的 如果一个类不是专门为继承而设计的,那么就应该主动将它加上final声明,禁止它可以被继承
open class Person{
...
...
}
- 继承
Student:Person()
{
var sno=""
var grade=0
}
() 主、次构造函数
主:不带参数、没有函数体
class Student(val sno: String, val grade: Int) : Person() {
}
//实例化
val student = Student("a123", 5)
如果要在主构造中写逻辑 使用init结构体
class Student(val sno: String, val grade: Int) : Person() {
init {