0%

Kotlin Basic Chapter Three

Kotlin学习笔记

关键字

Constructor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//主构造器 primary constructor
//constructor 构造器移到了类名之后,类的属性 name 可以引用构造器中的参数name
class User constructor(name: String) {
var name: String = name

init {
this.name = name
}
}
//次构造器
class User {
val name: String
constructor(name: String) {
//没有 public
this.name = name
}
}
//如果类中有主构造器,那么其他的次构造器都需要通过 this 关键字调用主构造器
class User constructor(var name: String) {
constructor(name: String, id: Int) : this(name) {
}
constructor(name: String, id: Int, age: Int) : this(name, id) {
}
}

//通常情况下,主构造器中的 constructor 关键字可以省略:
class User(name: String) {
var name: String = name
}

//在构造器中直接声明属性
class User(var name: String) {
}
// 等价于:
class User(name: String) {
var name: String = name
}
  • Kotlin 中使用 constructor 表示。
  • Kotlin 中构造器没有 public 修饰,因为默认可见性就是公开的。

init

1
2
3
4
5
6
7
class User {
init {
// 初始化代码块,先于构造器执行
}
constructor() {
}
}

val

类似Java中的final,定义只读变量

1
2
3
4
5
val fina1 = 1
// 参数是没有 val 的,默认为常量
fun method(final2: String) {
val final3 = "The parameter is " + final2
}

val自定义 getter

1
2
3
4
val size: Int
get() { // 每次获取 size 值时都会执行 items.size
return items.size
}

object

创建一个类,并且创建一个这个类的对象,即为单例

1
2
3
object Sample {
val name = "A name"
}

在代码中如果要使用这个对象,直接通过它的类名就可以访问:

1
Sample.name

这种通过 object 实现的单例是一个饿汉式的单例,并且实现了线程安全。

1
2
3
4
5
6
//使用object创建匿名内部类
val listener = object: ViewPager.SimpleOnPageChangeListener() {
override fun onPageSelected(position: Int) {
// override
}
}

companion object

companion 可以理解为伴随、伴生,表示修饰的对象和外部类绑定,const用来定义常量,在内部直接使用变量名访问

1
2
3
4
5
class A {
companion object {
const val TAG: String = "TAG"
}
}

Any

Java 中的 Object 在 Kotlin 中变成了 Any,和 Object 作用一样:作为所有类的基类。

如果你觉得有用,可以请我喝杯茶