he is coding

Kotlin入门

| Comments

定义变量

1
2
val name : String = "this is my name"
var count : Int = 666
  • 关键字var表示声明的变量可变,对应的val表示不可变,作用相当于Java的final
  • kotlin自带空安全检测,因此声明属性时我们必须明确该属性是否可以为null,区别就在与声明时是否加上?
1
2
3
var name : String = null //编译不通过

var name : String ? = null //通过

定义方法

kotlin中可以直接声名方法,和c类似,并不强制方法在类里面

1
2
3
fun 方法名(形参声明:形参类型) : 返回值{
    //...
}
  • 使用关键字fun开头
  • 参数声名顺序和Java是反的,中间用:隔开
  • 返回值在末尾,用:隔开

如果返回值为Unit可以省略,等价于Java中的void
如果方法不在类里面,查看Java字节码,类似于工具类,所有的方法都是静态方法

e.g. 文件名: ToastUtil.kt

1
2
3
fun show(msg : String){
    //...
}

等价于

1
2
3
4
5
6
public final class ToastUtil{
    public static void show(String msg){
        //...
    }

}

定义类

构造函数

  • 类名后面的为主构造函数
  • 可以没有主构造函数
  • 支持多个次构造函数
  • 次构造函数均需要调用主构造函数
  • 次构造函数的参数不能加var 或者val
1
2
3
4
5
6
7
8
class User(val name : String/*主构造函数*/){
    
    //次构造函数,关键字`constructor`
    constructor(age : Int,name : String) : this(name){
        // : this 调用主构造函数
    
    }
}

不像次构造函数,主构造函数没有代码块可以执行,kotlin提供了init代码块

1
2
3
4
init {
    //这里的代码运行在主构造函数中
    //也就是说即使没有主构造函数,这里的代码也会在次构造函数代码块之前执行
}

类属性

e.g.

1
2
3
class User(val name:String){
    var age : Int = 12
}
  • kotlin中类的属性默认是私有的,提供get set方法进行访问,(对val声明的不提供set方法)

  • 属性声明时(或者声明成员变量时)一定要初始化),如果不能在声明时就初始化可以使用lateinit关键字,等待外部调用set方法进行初始化

1
lateinit var name : String

注意:lateinit不能修饰基本类型

  • 属性、init代码块、次构造函数代码块三者的调用顺序

属性和init代码块按照他们声明的顺序,次构造函数代码块在最后

创建对象

没有new关键字,和python类似

1
2
val user = User("Tom")
user.age = 666

Comments