Kotlin语法速览
一、基础语法
https://github.com/zhiwei1990/android-jetpack-demo
.kt
.java 一个public的class
toplevel
.kt,变量,常量,类,多个。混合。
-
变量
var a:Int =2//没有int Int,没有Integer,Double,没有double var a = 3 val π2 = 6//不可变量 和常量的区别在于内存加载的位置不一样 var ss:String?=null //可以为null必须? lateinit var str:String//不能null,必须引用类型。 先声明后赋值 val sstr:String by lazy{ "by lazy string" }/* hhh 懒加载,第一次初始化的,前面必须val,不能为null*/ const val π = 3.14//常量
-
函数
fun sum(a:Int,b:Int):Int{//返回值可以这样写 = a+b return a+b } fun div(c:Int,d:Float = 1f){ //... } fun more(vararg a:Int) :Int{//vararg可变,可以传递多个,想当个数据 a.get(0),a.get(1),a[2]//通过get进行获取 //,,,,, return 999 } /** * 注释 // /**/ */ fun main(args:String){ val sum = sum(1,2) val ss = div(2) more(2,35,23) //打印 println(sum) }
-
语法
//for,when fun main(args:String){ for(i in 0..10){ println(i) } for(i in 0 until 10) println(i) for(i in 0..10 step 2)println(i) for(i in 10 downTo 0 step 2)println(i) //when var i:Type when(i){ i is String->{} i !is Float->{} i in 0..10->{} i==2->{} else->{}//不满足以上的条件 } when{ boolean->{} else->{} } }
-
类
-
class 可以写()也可以不写
class Aclass(){ //属性 var age var name:String = "" lateinit var b:String //函数 fun getSomeInfo():String{ this::b.isInitialized//boolean 判断是否初始化 return "" } } interface AAA{ fun aaa() fun bbb():Int fun ccc(){//接口可以有自己的方法体 } }
-
object 理解为工具类
object Obclass{ //成员函数。属性,单例静态函数 fun aaa(){} } //类名直接调用方法() Obclass.aaa()
-
data class 实体类 (必须要有一个成员参数,成员参数必须要有数据类型)
data class AAA(var name:String,var age:Int = 20){ var grade:String = "" } val aa = AAA("hhh",98)
-
sealed class 必须在同一个文件kt里面 申请子类
//密封类,类似枚举类型作用 kt sealed class Slclass() data class Ac(var a:Int) :Slclass object Obc:Slclass
-
-
构造函数
class AAA(private var b:Int=9) class AAA private constructor(private val a:Int){//添加private相当于声明 val ccc = a fun aaa(){ a//方法里面参数a是取不到的 } } class AAA{ constructor()//如果不写 constructor()/ constructor(var b:Int){//次级构造函数必须调用主构造函数 //kkkkk } constructor(var a :Int,var b:String="") init{ //init some data } } class AAA{ //constructor()//如果不写 constructor()次级构造函数必须:super调用主级构造函数 constructor(var b:Int):super{//次级构造函数必须调用主构造函数 //kkkkk } constructor(var a :Int,var b:String=""):super init{//调用主构造函数之后直接调用init方法 //init some data } }
-
高阶函数
//also,with,let,apply,run, 没有区别,根据语境 var s:String?=null //如果是null都可以去执行 s?.also{it->//同时在执行其他事情 } s?.let{it-> } //this->仅仅为了看清楚。 s?.apply{this-> length//相当于s.length } with(s){this-> ?. } s?.run{this-> } //typealias 定义别名 typealias ob = java.Observer
//take,takeunless,takeif,runcatching(异常),group(数组),map,flatmap(语法糖),last,first,.....
代码导入修改 ![1635388339972](C:\Users\123456\AppData\Roaming\Typora\typora-user-images\1635388339972.png)