1.Kotlin语言中使用"object"修饰静态类 "companion object"修饰静态方法
kotlin主构造函数不能包含任何代码,相关初始化代码放入init代码块
init{} -> 构造 -> companion object
kotlin中需要将静态变量放入companion object 代码块
companion object {
const val TAG = "permissions"
}
2.const val和val区别
可变变量定义:var 关键字
不可变变量定义:val 关键字,只能赋值一次的变量(类似Java中final修饰的变量)
object myObject {
const val constObject: String = "constObject"
val normalObject: String = "normalObject"
}
打开Android studio 点击 Tools->Kotlin->Show Kotlin ByteCode
public final class com/example/kotlin/myObject {
// access flags 0x19
public final static Ljava/lang/String; constObject = "constObject"
@Lorg/jetbrains/annotations/NotNull;() // invisible
// access flags 0x1A
private final static Ljava/lang/String; normalObject = "normalObject"
@Lorg/jetbrains/annotations/NotNull;() // invisible
// access flags 0x11
public final getNormalObject()Ljava/lang/String;
@Lorg/jetbrains/annotations/NotNull;() // invisible
L0
LINENUMBER 144 L0
GETSTATIC com/example/kotlin/myObject.normalObject : Ljava/lang/String;
ARETURN
L1
LOCALVARIABLE this Lcom/example/kotlin/myObject; L0 L1 0
MAXSTACK = 1
MAXLOCALS = 1
......
}
- const val 可见性为public final static,可以直接访问。
- val 可见性为private final static,并且val 会生成方法getNormalObject(),通过方法调用访问。
3.类型后面加?表示可为空
var age: String? = "23"
4.修饰符
abstract // 抽象类
final // 类不可继承,默认属性
enum // 枚举类
open // 类可继承,类默认是final的
annotation // 注解类
private // 仅在同一个文件中可见
protected // 同一个文件中或子类可见
public // 所有调用的地方都可见
internal // 同一个模块中可见
5.循环
fun cases(obj: Any) {
when (obj) {
1 -> print("One") //如果obj的值为1
"Hello" -> print("Greeting") // 如果obj的值为hello
is Long -> print("Long") // 如果obj的类型是Long类型
!is String -> print("Not a string") // 如果obj的类型不属于String类型
else -> print("Unknown") // 默认,相当于switch的default
}
}
if (x in 1..y-1) { //1..y-1表示1到y-1的范围
print("OK")
}
for (i in 1..100) { ... } // 1到100范围
for (i in 1 until 100) { ... } // 半开范围,不包括100,相当于[1,100)
for (x in 2..10 step 2) { ... } // 每次夸2,内容为2,4,6,8,10
for (x in 10 downTo 1) { ... } // 返序
if (x in 1..10) { ... }
6.with、Boolean?
val b: Boolean? = ...
if (b == true) {
...
} else {
// `b` 是false或者为null
}
class Turtle {
fun penDown()
fun penUp()
fun turn(degrees: Double)
fun forward(pixels: Double)
}
val myTurtle = Turtle()
// 如果正常的写
myTurtle.penDOwn()
for(i in 1..4) {
myTurtle.forward(100.0)
myTurtle.turn(90.0)
}
myTurtle.penUp()
// 使用with将对象实例引用,代码减少很多
with(myTurtle) {
penDown()
for(i in 1..4) {
forward(100.0)
turn(90.0)
}
penUp()
}
网友评论