前言
这个是本人在学习kotlin 在官网看的相关的知识的总结
属性
声明属性:使用val声明一个不可变的属性,通过var声明一个可变的属性
//这是一个不可变的属性
val string:String = ....
//这是一个可变的属性
var string2:String=...
属性使用:要使用属性可以通过名称直接应用
class Person(val name:String,val age:Int)
fun main(args:Array<String>){
val person = Person("栾桂明",12)
println("这个人的名称是"+person.name)
}
属性创建的完整语法:
var <属性名称> [:<属性类型>] [=<属性的初始化> ]
[<getter>] [<setter>]
/*** * 下边的这段代码会报错 因为属性的初始化的时候的getter setter 方法是默认包含的 这里没有属性的 * 初始化器,所以会报错 */
// var alldefault :Int?
/*** * 数据的可以默认的推断出来 */
var initialized = 1
/*** * 一个只读属性的语法和一个可变的属性的语法有两方面的不同:1、只读属性的用 val开始代替var 2、只读属性不允许 setter */
class Demo1() {
val simple: Int?
init {
simple = 1
}
}
val inferredType = 1
// 自定义get方法
val string: String get() = string.toString()
//自定义的getter和setter方法
var string2: String
get() = "初始化字符串"
set(value) {
string2 = value
}
幕后字段
在kotlin中不能直接声明字段,当属性需要一个幕后字段的时候kotlin会自动的提供,这个幕后字段可以通过field标识符在访问器中访问(field 字段是能在属性的访问器中使用)
var string = 0
set(value)={
if(value>0){
field = value
}
}
如果属性至少一个访问器使用默认实现,或者自定义访问器通过 field 引用幕后字段,将会为该属性生成一个幕后字段
幕后属性
此处有点没看懂,
编译器常量
定义:已知数值的属性可以使用const修饰符标记为 编译器常量
要求:
1:位于顶层或者是object的成员
2:使用String或者原生的数据类型初始化
3:没有自定义getter方法