Kotlin
1.类型可变,后置,自动识别
var/val name
fun functin:Int / var name:String
var name="abcdefg"
2.data
open class hello{}
data class world{}
3.迭代
for (i in 1..100)
for (i in 100 downTo 1 step 2)
for(i in 1 until 100)
4.when
fun hello(color:Color)=
when(color){
Color.RED->"blue"
Color.WHITE,Color.BLACK,Color.ORANGE->"blue"
else->"else"
}
5.字符串模板
val name="world"
println("hello"+"$name")
println("hello"+"${max(1,2)}")
6.Unit类型
fun f():Unit
7.Noting类型
当返回值没有意义或者发生异常时,常用Nothing来替代
fun f(message:String):Nothing{}
8.判断
8.1 in 和 !in
fun isBetter(c:char)= c in 'a'...'z'&& c !in 'A'...'Z'
8.2 all any count find
val list=listOf(1,2,3,4,5,6,7,8)
val result={i:Int->i%2==0}
println(list.all(result))
8.3 可空类型
name as String
name as? Int
A?.toUpperCase()
如果前面有过判空,代码将记住,后面默认为不为空类型
A?.B
fun str(s:String?):Int{
s ?. length ?: 0
}
private lateinit var hi:String
kotlin要求构造方法中初始化所有属性,否则必须用可空类型
9.函数
9.1 高阶函数
9.2 扩展函数
fun String.abc():char=...
9.3 伴生函数
fun campaion.Sring.
9.4 顶层函数
package Utils
fun hi(a:Int,b:Int)=if(a>b) a else b
import package Utils.hi
fun main(args:Array<String>){
hi(3,7)
}
9.5 密封类
- static = sealed + abstract
- sealed作用防止类多次派生,引起逻辑混乱,如A继承B,B继承C…
- sealed能被继承但是子类只能执行父类方法不能拓展,且为final,sealed或者unsealed
9.6 修饰符
java | Kotlin |
---|
protected 同包及不同包子类 | protected子类 | default同包 | internal模块 |
9.7 构造函数
- 主构造只能有一个,次构造可以有多个
- 主构造没有方法体,用init初始化,不管什么结构体,init先执行
constructor{
init(){}
}
constructor(name:String,age:Int){}
9.8 内部类和嵌套类
类型 | java | Kotlin |
---|
内部类 | class A | inner class A | 嵌套类 | static class A | class A |
9.9 open abstract override
open | abstract | override |
---|
不final | 抽象,默认open | | 可以重写 | 在抽象类中使用,必须重写 | 重写父类或接口中的成员 |
abstract class hi{
abstract fun B()
open fun A{}
}
java | kotlin |
---|
static | campion | get/set | data | void | Unit | 内部类 | 拓展函数 | === | ==比较地址值 | void | Unit |
|