分享一个安卓小技巧:如何查看kotlin的字节码。
我们打开AS新建一个类,敲上一个变量:
package com.example.textone
class TestOne {
var a : Int = 1
}
然后连续敲两下shift,搜索show Kotlin Bytecode会看到如下页面:
我们可以看到a就是一个私有的变量,我们再定义一个b常量:
我们可以看得到常量b是加上了final关键词的,这就是var和val的区别,我们再用const关键词定义一个c:
我们看到会立马报错,这是因为const 只能修饰Kotlin的顶级属性(在 .kt 文件中class外声明的属性),或object对象中(object类似Java中的匿名内部类,也就是伴生对象)的属性,并且值被声明为基本类型或String,接下来我们一一解析:
这样定义就是在class外声明的属性
这样就是定义在伴生对象中,伴生对象相当于类的对象,可直接通过类名访问伴生对象的成员;每个类最多定义一个伴生对象;kotlin没有 static 关键字,伴生对象是为弥补kotlin没有 static 修饰的静态成员的不足。
我们再伴生对象中定义几个值:
我们可以看到e报黄,编译器提示我们e应该加上const关键词,这恰恰印证了伴生对象是为弥补kotlin没有 static 修饰的静态成员的不足,我们再看看这些值的字节码:
我们可以清晰的看到伴生对象中定义的值都被加上了static关键词,c和e还因为const关键词加上了final关键词,我们顺便回顾一下Java中static、final、static final的区别:
static修饰的属性强调它们只有一个且可以被共享,final修饰的属性表明是一个常数(创建后不能被修改)。static final修饰的属性表示一旦给值,就不可修改,并且可以通过类名访问。(唯一、不可修改)static final也可以修饰方法,表示该方法不能重写,可以在不new对象的情况下调用。