kotlin(一):基本语法之属性

2018-08-31  本文已影响0人  小川君
属性修饰符
kotlin中,使用‘var’、‘val’来修饰属性,其中val修饰的是常量,相当于‘final’,var修饰变量,
一个属性必有这两个关键字其中一个来修饰   
```
var s;
val s: Int = 0
```
属性命中规范:

java中通过 属性类型 属性名 = 属性值; 的方式来声明属性

String str = "chuan";

kotlin中则通过 属性修饰符 属性名: 属性类型 = 属性值的方式来声明属性

index: Int = 0
set/get函数

声明一个属性完整的语法是(以var为例):

var index: Int = 0
    get() = this
    set(intValue){
        this = intValue
    }
    
使用文字说明就是

属性修饰符 属性名称: 属性类型 = 属性初始值
    get函数
    set函数

其中 属性类型可以省略,当然是在可以根据属性初始值判断出属性类型的前提下
属性初始值以及set、get函数也可以省略
如下
var index1 = 0

var index2: Int 
index2 = 0

var index3: Int = 0

最后再加上前面的那个表达式 
var index4: Int = 0
    get() = field
    set(intValue){
        field = intValue
    }
其中field代表当前属性本身的值,且只能使用在访问器(个人觉得即set/get方法中)

前面几个表达式中少了这样一种命名方式:var index5: Int
有修饰符、属性名以及属性类型,但是没有属性值
当然我们可以使用 var index5: Int? = null ,但是这并不是我们当前小节所需要的,
我们需要的是没有等于号后面的乱七八糟的东西,接着往下看
延迟初始化属性与懒加载

对于上面的问题,我们可以使用lateinit来解决
lateinit 意为延迟初始化,即在编译期检查时并不会因未初始化而报错,相应的,我们需要在引用之前进行初始化

lateinit var index: String

注意:

1、lateinit只能用来修饰对象,不能用来修饰基本类型,因为基本类型在类加载后都会有一个默认的初始值,
    String既是基本类型又是数据类型

2、lateinit修饰的属性,只能是成员属性,即类属性

3、必须是var修饰且该属性没有自定义的get/set方法

与lateinit相对是懒加载by lazy

val str: String by lazy{
    "str init by 'by lazy'"
}

{}中的最后一行为返回值 即str的值为"str init by 'by lazy'"

by lazy懒加载即在第一次引用的时候才会进行初始化,(跟java内部类单例是不是有点相同的味道)在初始化过程中如果消耗大量资源时,会非常受用

这里说到了单例,就顺便写一下ktolin下的单例

public class Singleton private constructor() {

    companion object {
        val instance: = Singleton()
    }
}

companion object 意为伴生对象,具体的我也不清楚,但是可以理解为java中的static关键字是没有错的,静态方法

 companion object {
        fun getCurrentVersion(): String {
            return xxxx
        }
    }

关于private constructor可以理解为是类的构造器,关于类的会在后面说到

空属性的创建

kotlin号称永不抛出空指针异常,相应的就需要我们对待空对象时有相应的处理

var str: String? = null

?在这条语句中代表可为空 str?.toString()str?代表str不为空时会调用后面的函数,如果为空则不调用

上一篇 下一篇

猜你喜欢

热点阅读