- Kotlin系列
0.【翻译】Using Kotlin for Android Development
1.Kotlin入门(一):变量的声明和使用
2.Kotlin入门(二):方法的定义和使用
3.Kotlin入门(三):if, when, for, while
4.Kotlin入门(四):null安全(“?”,“?:”,“!!”)
5.Kotlin入门(五):类与继承
6.Kotlin入门(六):内联方法
7.Kotlin入门(七):enum,data,sealed,object
变量声明
-
只读变量
可理解为Java中常量,使用 val 关键字修饰
val a: Int = 1 //在声明的时候直接赋值
val b = 2 // 类型是明确的,变量类型Int可省去
val c: Int // 在声明时没有赋值,变量类型Int不可省去
c = 3 // 只可赋值一次,此后c值不能再变
-
易变变量
可理解为Java中的普通变量,用 var 关键字修饰,与 val 变量的区别是变量的值可变:
var a=0
a=1
a=3
-
成员变量
与Java一样,通过对象.变量名的方式调用:
fun main(args: Array<String>) {
print(Test().property)
}
class Test{
var property="property"
}
-
静态变量
用companion object{}包裹,与Java一样通过类名.变量名的方式调用,关于companion object后面会详细讲解:
fun main(args: Array<String>) {
print(Test.com)
}
class Test{
companion object{
var com="com"
}
}
-
顶级变量
在类的外部声明,可理解为Java中的静态成员变量。
通过包名.变量名的方式来调用
样例:
package a.b.c
var top = "top"
fun main(args: Array<String>) {
print(a.b.c.top)
}
-
静态变量与顶级变量的区别:
通过反编译可以知道,其实他们不在一个类中。
当文件中有顶级变量,编译时会新生成一个[文件名+kt]的类,顶级变量就在其中。
Getters and Setters
通过反编译可知,编译过程会生成对应的setter和getter方法。
如果变量var类型,则生成setter和getter方法,如果是val类型则只生成getter方法。
我们不能直接调用getter和setter方法,其实当我们对变量进行操作时,本质上就是调用了这些方法。
我们也可以自定义getter和setter方法
- 语法
<var <propertyName>[: <PropertyType>] [= <property_initializer>]
[<getter>]
[<setter>]
当给变量赋值时会调用setter方法,调用变量得到的是getter中的返回值
样例:
var name: String = "111"
get() {
return "{$field}"
}
set(value) {
field = "[$value]"
}
fun main(args: Array<String>) {
println(name)
name = "222"
print(name)
}
结果:
{111}
{[222]}
通过反编译可知,如对于上面的name变量,编译过程会生成
public static final String getName() {
return '{' + name + '}';
}
public static final void setName(@NotNull String value) {
Intrinsics.checkParameterIsNotNull(value, "value");
name = '[' + value + ']';
}
-
注意:
根据上面这一特点,我们不能自己去创造变量对应的setter,getter方法,如上面声明了name变量,
我们就不能创造getName()和setName(name:String)方法。
网友评论