笔记内容来自 扔物线 的 https://kaixue.io/kotlin-basic-2/
构造函数
constructor
表示。Kotlin 的 init 代码块和 Java 一样,都在实例化时执行,并且执行顺序都在构造器之前。
语言 | 关键字 | 是否是默认值 |
---|---|---|
Java | final | 非默认 |
Kotlin | val | 默认。这样设计的原因是保证了参数不会被修改 |
object 不是类,像 class 一样在 Kotlin 中属于关键字,意思是对象。
用 object 修饰的对象中的变量和函数都是静态的
object Sample {
val name = "A name"
}
上述代码含义,创建一个类,并创建一个这个类的对象。
在代码中如果要使用这个对象,直接通过它的类名就可以访问:
Sample.name
1、用 object 可以实现单例模式,且线程安全
// ? class 替换成了 object
object A {
val number: Int = 1
fun method() {
println("A.method()")
}
}
2、用 object 创建匿名类
val listener = object: ViewPager.SimpleOnPageChangeListener() {
override fun onPageSelected(position: Int) {
// override
}
}
companion 可以理解为伴随、伴生,表示修饰的对象和外部类绑定。
Java 静态变量和方法的等价写法:companion object 变量和函数
class A {
companion object {
var c: Int = 0
}
}
直接调用 A.c
把属性和函数的声明不写在 class 里面。
这样写的属性和函数,不属于任何 class,而是直接属于 package。
package com.hencoder.plus
// ? 属于 package,不在 class/object 内
fun topLevelFuncion() {
}
调用的时候:
import com.hencoder.plus.topLevelFunction // ? 直接 import 函数
topLevelFunction()
在实际使用中,在 object、companion object 和 top-level 中该选择哪一个?
Kotlin 中只有基本类型和 String 类型可以声明成常量。
语言 | 关键字 | 示例 |
---|---|---|
Java | static final | public static final int CONST_NUMBER = 1; |
Kotlin | const | const val CONST_SECOND_NUMBER = 2 |
语言 | 类型 | 含义 |
---|---|---|
Java/Kotlin | List | 以固定顺序存储一组元素,元素可以重复 |
Java/Kotlin | Set | 存储一组互不相等的元素,通常没有固定顺序 |
Java/Kotlin | Map | 存储 键-值 对的数据集合,键互不相等,但不同的键可以对应相同的值 |
List 集合的创建
List strList = new ArrayList<>();
strList.add("a");
strList.add("b");
strList.add("c"); // ? 添加元素繁琐
val strList = listOf("a", "b", "c")
Set 集合的创建
Set strSet = new HashSet<>();
strSet.add("a");
strSet.add("b");
strSet.add("c");
val strSet = setOf("a", "b", "c")
Map 集合的创建
Map map = new HashMap<>();
map.put("key1", 1);
map.put("key2", 2);
map.put("key3", 3);
map.put("key4", 3);
val map = mapOf("key1" to 1, "key2" to 2, "key3" to 3, "key4" to 3)
mapOf 的每个参数表示一个键值对,to 表示将「键」和「值」关联
Kotlin 中不可变(只读)集合:集合的 size 不可变、集合中的元素值不可变
类型 | 是否可变 | 函数 | 转换为可变 | 转换为可变的备注 |
---|---|---|---|---|
List | 不可变 | listOf() |
toMutableList() |
返回的是一个新建的集合 |
List | 可变 | mutableListOf() |
– | – |
Set | 不可变 | setOf() |
toMutableSet() |
返回的是一个新建的集合 |
Set | 可变 | mutableSetOf() |
– | – |
Map | 不可变 | mapOf() |
toMutableMap() |
返回的是一个新建的集合 |
Map | 可变 | mutableMapOf() |
– | – |
有 mutable
前缀的函数创建的是可变的集合,没有 mutbale
前缀的创建的是不可变的集合(可以通过 toMutable*()
变成可变集合,但生成的是一个新的集合)。
修饰符 | 描述 |
---|---|
public | 公开,可见性最大,哪里都可以引用 |
private | 私有,可见性最小,根据声明位置不同可分为类中可见和文件中可见 |
protected | 私有,可见性最小,根据声明位置不同可分为类中可见和文件中可见 |
internal | 内部,仅对 module 内可见 |