Kotlin 笔记

伴生对象java

伴生对象(companion object )相似于java中的静态关键字static。在Kotlin没有这个关键字,而是伴生对象,具体用法安全

open class People constructor(var id: String,  var name: String){
    //能够类中初始化属性:
    var customName = name.toUpperCase() //初始化属性

    //使用constructor前缀声明,且必须调用primary constructor,使用this关键字
    constructor( id: String, name: String, age: Int) : this(id, name) {
        println("constructor")
    }

    init {
        println("初始化操做,可以使用constructor参数")
    }
   //,Kotlin的class并不支持static变量,因此须要使用companion object来声明static变量,
   // 其实这个platformStatic变量也不是真正的static变量,而是一个伴生对象,
    companion object {
        val ID = 1
    }
}

使用的话直接People.IDthis

变量类型:可空指针

kotlin的特性之一是类型安全。定义变量时须要定义该变量是否为空,一旦要求变量不能为空,那后续的空指针问题天然也不复存在。咱们先来看kotiln里是如何定义变量的:code

java:

String str = "test";
final String str2 = "test2";
String str3;

kotlin:

var str = "test"
val str2 = "test2"
var str3:String ?= null

kotlin使用var,val关键字定义变量,若是在定义变量时直接赋值,则能够不用指定变量类型,不然须要在变量名后使用“:”来指定类型。在类型后加“?”表示该变量可空。若是变量可空,那在后续使用变量时,就必须先判断是否为空。 另外从代码中能够看出很重要的一点,那就是:今后不再用写分号啦orm

var a:Int = null  //错误,类型后没?,即不可空类型,天然不能等于null
var a:Int? = null  //正确

val canNull: Int ? = 0 
canNull.toFloat  //错误,可空变量调用时要判断空
canNull?.toFloat   //正确,(若是是null,什么都不作)
canNull!!.Float   //正确,(若是null,报空指针)
val canNotNull: Int  = 0 
canNotNull.toFloat  //正确

那若是在定义变量时(例如定义成员变量),又想该变量不为空,又不想子定义时就初始化要怎么办呢?使用lateinit关键字对象

lateinit var test:String //正确
lateinit val test:String //错误
lateinit var test:Float //错误

可见,lateinit修饰符只能修饰不可空类型,而且不容许修饰基础类型(四类八种基础类型int, double,boolean等)。it

Java四类八种基础类型io

java基本数据类型:四类八种form

数值型:整型 byte short int long 非数值:字符型 char

浮点型 float double 布尔 boolean

相关文章
相关标签/搜索