Kotlin学习笔记一

239 阅读2分钟

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);