Kotlin笔记-属性

定义常量与变量

类中声明的属性,一定要初始化,否则会编译错误。除非你对属性使用了abstract进行修饰。

    var name: String = ""
    //abstract var size : Int//必须在抽象类中使用

    var boss = "L"

可变变量定义:var 关键字

var <标识符> : <类型> = <初始化值>

不可变变量定义:val 关键字,只能赋值一次的变量(类似Java中final修饰的变量)

val <标识符> : <类型> = <初始化值>

常量与变量都可以没有初始化值,但是在引用前必须初始化
编译器支持自动类型判断,即声明时可以不指定类型,由编译器判断。

val a: Int = 1
val b = 1       // 系统自动推断变量类型为Int


var x = 5        // 系统自动推断变量类型为Int
x += 1           // 变量可修改

getter和setter

我们可以按照下面的方式对属性进行读写操作:

        var company=Company()
        company.name

不同于java,这其实就是对getter和setter方法的隐式调用,是默认的实现,显示写出来应该是以下:

    var boss = "L"
        get() = field
        set(value) {
            field=value
        }

访问权限

如果我们不想公开某个方法时,可以使用private修饰符实现

        var name: String = ""
        private set

此时外部就不能修改这个值了,get不能这样使用,get的访问权限和属性是一致的

自定义getter和setter

既然知道了getter和setter的默认实现,那么我们就可以进行自定义实现

        var address: String = ""
        get() = if (field.length > 0) "" else "大家好看"
        set(value) {
            field = if (value.length > 0) "" else value
        }

field

在上面我们用到了一个field,在Kotlin中getter和setter不允许使用局部变量的,因为对属性的调用也就是对getter的调用,这样很容易产生递归,造成内存溢出。所以Kotlin为我们提供了field,用这个field代替属性本身进行操作

lateinit

lateinit关键字是用于延迟初始化的,我们在类中声明的属性必须初始化。
假如想在类内声明一个NULL属性,在需要时再进行初始化,这时就需要用到了

你可能感兴趣的:(Kotlin)