1、!!(表示当前对象不为空的情况下执行,使用此符号的对象在出现null的情况是,会抛出异常)
2、?(可以为null,对象值为null时不会抛出异常) var str:String?=null
3、方法扩张(例如:Long.toString(l:Long):String)
4、in 在什么范围?in 不在什么范围之内 fun isLetter(c: Char) = c in 'a'..'z' //判断c是否在a-z区间 fun isNotDigit(c: Char) = c !in '0'..'9' //不在这个0到9区间
5、is 是否是某种类型(类似java中instanceof) ?is(不是某种类型,与is相对)
6、as强制类型装换 ?as强制类型转换,如果转换失败则返回null,不会抛异常
7、var 定义变量,变量值可修改 val定义变量 变量值不可修改(类似java中的final)
8、后面的变量值、方法返回值放在此处使中 ( val str : String = "自学kotlin中" println("最近在干啥呢$str") )
9、when语法(和java中的switch case default 类似) kotlin代码 fun faceScoreDescn(score:Int):String{ var descn:String; when(score){ 10 -> descn = "令人惊艳的帅(美)" 9 -> descn = "令人着迷的帅(美)" 8 -> descn = "帅哥(美女)" 7 -> descn = "有点帅(漂亮)" 6 -> descn = "中等水平" else -> descn = "其貌不扬" } return descn } java代码 public String faceScoreDescn(int score){ String descn=null; switch(){ case 10: descn = "令人惊艳的帅(美)"; break; case 9: .....
default
descn = "其貌不扬"
}
return descn
复制代码
}
10、override: 父类方法
11、fun: 方法声明
12、有返回值的方法的多种写法 //有返回值 fun sum(a: Int,b: Int): Int{ retrun a + b }
//等同于 fun sum(a: Int,b: Int) :Int = a + b
//等同于 fun sum(a: Int,b: Int) = a + b
fun maxOf(a: Int, b: Int): Int { if (a > b) { return a } else { return b } }
//等同于 fun maxOf(a: Int, b: Int) = if (a > b) a else b
13、Unit表示方法没有返回值,Unit概念上相当于Java中的Void,当然也可以不写
fun showMsg(msg:String):Unit{ println(msg)//在logcat中可看到打印出的内容 } fun showMsg(msg:String){ println(msg)//在logcat中可看到打印出的内容 }
14、覆盖的规则 open class A { open fun f() { print("A") } fun a() { print("a") } } interface B { var name: String //属性在接口中不可以被赋值,需要子类重写 fun f() { print("B") } // 接口的成员默认是 'open' 的 fun b() { print("b") }
} class C() : A(), B { override var name: String = "c" // 编译器要求 f() 方法必须覆盖: override fun f() { super.f() // 调用 A.f() super.f() // 调用 B.f() } }
15、初始化一个list val food = listOf("orange", "apple", "bear", "tomato")//这种方式只读
16、字符串String 原生字符串(raw string)由三重引号表示( """ ), 其内容不转义, 可以包含换行符和任意字符
val text = """
for(c in "foo")
print(c)
"""
println(text)
复制代码
三个双引号包裹的字符串 内容 格式不变
val text = """
|for(c in "foo")
|print(c)
""".trimMargin("|")
println(text)
复制代码
17、位运算
18、相等操作符
19、修饰符 private 表示只在这个类(以及它的所有成员)之内可以访问; protected — 与 private 一样, 另外在子类中也可以访问; internal — 在 本模块之内, 凡是能够访问到这个类的地方, 同时也能访问到这个类的 internal 成员; public — 凡是能够访问到这个类的地方, 同时也能访问这个类的 public 成员.
在 Kotlin 中, 外部类(outer class)不能访问其内部类(inner class)的 private 成员
20、lateinit
那如果在定义变量时(例如定义成员变量),又想该变量不为空,又不想在定义时就初始化要怎么办呢?使用lateinit关键字
lateinit var test:String //正确 lateinit val test:String //错误 lateinit var test:Float //错误 关于lateinit关键字的使用限制:
lateinit modifier is allowed only on mutable properties
lateinit modifier is not allowed on primitive type properties
复制代码
可见,lateinit修饰符只能修饰不可空类型,并且不允许修饰基础类型(四类八种基础类型int, double,boolean等)。
21、for循环 java:
for(int i =0; i < 5; i++) { }
kotlin:
for(i in 0..4) { }
for (item in listData) { //遍历列表,直接操作列表内的对象 item.method() }
for (i in listData.indices) { //遍历列表带行index }
for((i, item) in list.witnIndex()) { //加强版 }
listData.forEach { it.method() } //变种的for循环