kotlin基础概念
1. 运行
在as中创建kotlin文件 kotlinText.kt
fun main() {
println("Hello Kotlin")
}
2. 变量
val (value简写) 申明不可变变量。
var (varibale简写)申明可变变量。
3. 函数
fun test(a: Int, b: String): String {
retrun "$a $b"
}
// 直接返回值
fun maxNum(a: Int, b:Int) = max(a, b)
4. if、when 返回值
fun max(a: Int, b: Int):Int {
return if (a > b) a else b
}
fun getScore(name: String) = when (name) {
"Tim" -> 88
"Jake" -> 99
else -> 0
}
// when 使用is判断类型,相当于instanceof
fun isNumber(number: Number) {
when(number) {
is Int -> println("$number is Int")
is Double -> println("$number is Double")
}
}
5. 循环语句
// [0,10] 循环打印 0 到 10 11个数字
for(i in 0..10) { println("$i") }
// [0,10) 循环打印 0 到 9 10个数字
for(i in 0 until 10) { println("$i") }
// [0,10;2) 打印 0 2 4 6 8 ,间隔2
for(i in 0 until 10 step 2) { println("$i") }
// [10,0] 循环打印 10 到 0 11个数字
for(i in 10 downTo 0) { println("$i") }
面向对象编程
类和对象
File 通常用于编写Kotlin顶层函数和扩展函数
fun main() {}
Class 对象类
// 可被继承类
open class Person{}
// 继承 Person 类
open class Student(val sno: String, val grade: Int) : Person() {
init {
println("sno = $sno, grade = $grade")
}
}
val stu = Student("01200854", 2)
class BigStudent(val sno: String, val grade: Int, val profession: String) : Student(sno, grade) {
init {
println("sno = $sno, grade = $grade, profession = $profession")
}
}
Interface 接口
interface Study {
fun readBook()
fun doHomeWork() {
println("doHomeWork")
}
}
class Student : Study {
override fun readBook() {
pritnln("read book")
}
}
权限修饰符
public 公开(默认)
private 类内部可见
protected 当前类和子类可见
internal 模块内可见
数据类
class 前面添加 data 即可为该类自动添加 get/set、hashCode、toString 方法。
data class Point(var x:Int, var y:Int)
fun main() {
val point = Point(11, 22)
point.toString()
}
单例
将 class 改为 object ,即可为该类实现单例
object Singleton {
fun test() { println("test") }
}
// 调用类似静态类,实际是单例实现
fun main() { SingLeton.test() }
集合
list、set、map数据集合和散列
1. list
// 只读列表
val list1 = listOf("a", "b", "c")
for(a in list1) { println(a) }
// 读写列表
val list2 = mutableListOf("a", "b", "c")
list2.add("d")
for(a in list2) { println(a) }
2. set
// 只读列表
val set1 = setOf("a", "b", "c")
for(a in set1) { println(a) }
// 读写列表
val set2 = mutableSetOf("a", "b", "c")
set2.add("d")
for(a in set2) { println(a) }
2. map
val map1 = HashMap<String, Int>()
map1["a"] = 1
map1["b"] = 2
println(map1["b"]) // 2
// mapOf 不可变, mutableMapOf 可变
val map2 = mapOf("a" to 1, "b" to 2)
for((k,v) in map2) { println("key = $k, value = $v") }
集合函数式API
val list = listOf("a", "bb", "ccc")
// maxBy
val maxLenValue = list.maxBy { it.length }
// map 转化
val listUpCase = list.map { it.toUpperCase() }
// filter 过滤
val filterList = list.filter { it.length > 1 }
空指针检查
kotlin默认不能为空,如需要为空,在类型后面添加?
fun nullTest(str: String?) {
// ?. 为null不执行
str?.toLowerCase(Locale.getDefault())
// 总体判断str不为空才执行
str?.let{
it.length
it.toUpperCase(locale.getDefault())
}
}
函数默认参数
fun testDefaultArgs(name:String = "Tim", age:Int = 12) {
println("name = $name, age = $age")
}
fun main() {
testDefaultArgs("Sam", 18)
testDefaultArgs("Cook")
testDefaultArgs(age = 18)
}
标准函数 with、run和apply
fun testWith() {
val result = with(StringBuilder()) {
// 上下文在StringBuilder实例内,相当于在StringBuilder内部编写代码
append("a\n")
append("b\n")
// 指定返回值
toString()
}
}
fun testRun() {
val result = StringBuilder().run{
// 上下文在StringBuilder实例内,相当于在StringBuilder内部编写代码
append("a\n")
append("b\n")
// 指定返回值
toString()
}
}
fun testApply() {
val result = StringBuilder().apply{
// 上下文在StringBuilder实例内,相当于在StringBuilder内部编写代码
append("a\n")
append("b\n")
// 无法指定返回值,必定返回自身
}.toString()
}
静态方法
1. 单例
object Utils {
fun sum(a:Int,b:Int) = a + b
}
2. 伴生类 companion object { }
class Utils {
companion object {
fun sum(a:Int,b:Int) = a + b
}
}
2. 伴生类+注解(java中真正的静态类) companion object { @JvmStatic }
class Utils {
companion object {
@JvmStatic
fun sum(a:Int,b:Int) = a + b
}
}
3. 顶层方法
创建 Utils.kt File类型文件
fun sum(a:Int,b:Int) = a + b
在kotlin中任意地方都可以直接调用顶层方法
fun main() {
sum(3, 4)
}
在java中调用
UtilsKt.sum(3, 4);