var
kotlin我们可以在变量前使用var关键字来替换变量的具体类型。比如:
// 显示使用Person
Person p1 = Person()
// 使用var替换Person的具体类型
var p2 = Person()
js中也使用var声明变量,但是kotlin与js不一样,kotlin是强类型语言,是基于JVM虚拟机的,因此在变量进行内存分配前需要明确变量类型以确保分配准确的内存大小供其使用。所以在var所在语句中应当能够准确推断出类型大小。
// 报错,提示 This variable must either have a type annotation or be initialized
var a
// 通过10推断b为Int类型
var b = 10
// 通过Person() 推断p1为Person类型
var p1 = Person()
// p2为Person, 只是暂时为null,未分配内存
var p2:Person?=null
val
与var相似的一个关键字是val,其用来声明常量,赋值后不能再进行修改。
val a = 10
// 报错 Val cannot be reassigned
a = 5
// 也可以先声明后赋值
val b :Int
b = 5
构造函数中变量声明
上面了解了var和val的使用,接下来看下在构造函数中应该如何声明变量
假设Person的构造方法如下:
class Person(val name:String, var age:Int, address:String)
构造方法中包含了val、var和两者都没有的情况。我们可以通过Kotlin Bytecode ——>Decompile的操作来得到对应的java文件:
public final class Person {
private final String name;
private int age;
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public void setAge(int var1) {
this.age = var1;
}
public Person(String name, int age, String address) {
this.name = name;
this.age = age;
}
}
可以看出:
- val修饰的变量类中会生成一个final的属性和对应的get方法;
- var修饰变量类中也会生成对应的属性及get、set方法;
- 无val和var修饰的变量不会在类中生成属性,该变量只能在构造方法内使用。