Kotlin基本语法

1、object 修饰的类为静态类。调用时可以 var name = Util.getName();

object Util {
    fun getName(): String {
        return BuildConfig.VERSION_NAME
    }
}

companion object 修改的方法为静态方法。调用时可以var name = Util2.getName(); 同时静态变量也需要申明在companion object下

class Util2 {
    companion object {
        var test:String? = ""
        fun getName(): String {
            return BuildConfig.VERSION_NAME
        }
    }
}

2、var 与 val的区别:
var修饰的变量可以改变值,可以重新赋值。val是一个只读变量,类似java中的final,创建的时候需要被初始化,赋值后不能被改变。

3、kotlin中所有的类默认是final的,如果你需要这个类能够被继承,那么需要将该类修饰为“open”(注意不是public)

//这个类具有`open`属性,可以被其他类继承
open class People: Speakable{
    //`open`的方法被实现和覆写,该方法也是`open`的
    override fun say() {}
    //`final`属性的方法,不可被覆写
    fun sayHello() {}
    //`open`属性的方法,可以被继承和覆写
    open fun sayName() {}
}

kotlin中所有的参数默认是public的,而java中默认是private的,如果kotlin也像java一样写成private,那同样得定义一系列的set()/get(),不然在类外面无法通过对象获取属性。
kotlin: var fileName: String? = null
java: private String fileName;

4、kotlin中是没有三目运算符的说法的

java中的语法
条件判断语句 ? "结果为true" : "结果为false";

kotlin中的语法

if(条件判断语句) "结果为true" else "结果为false"

5、 ?:
kotlin中有 对象A ?: 对象B的写法,?:的意思是当A为null时就返回B

6、关于可变数组

1、var cache1: MutableList = ArrayList() 或
2、var cache2: MutableList = mutableListOf("张三", "李四")
3、var cache3: MutableList = arrayListOf("张三", "李四")

mutableListOf()返回了一个ArrayList对象,从对比中可以看到,1无法初始化可变数组,而2和3可以初始化可变数组。1和3返回的是java的arrayList。

不可变数组

1、var cache1 = listOf("张三", "李四")
2、var cache2 = listOfNotNull(cache1)

2接受任意类型的参数,它的作用是剔除为null的参数,剩下的不为空的数据组成一个list。1和2都是不可变数组,没有add方法。

7、vararg 可变参数
fun test(vararg params: String){}功能等同于Java代码:
void test(String... params)

8、let、with、run、apply
let:一般使用:

object.let{
it.todo()//在函数体内使用it替代object对象去访问其公有的属性和方法
...
}
//另一种用途 判断object为null的操作
object?.let{//表示object不为null的条件下,才会去执行let函数体
it.todo()
}

with:一般使用:

with(object){
   //todo
 }
val user = User("Kotlin", 1, "1111111")
val result = with(user) {
    println("my name is $name, I am $age years old, my phone number is $phoneNum")
    1000
 }

let和with看似差不多,实际上在使用场景上还是有一些差别的,let可以用来做判空操作,但是with不行,with可以直接访问实例的公有属性和方法,但是let必须要用it来操作,其返回值为函数块的最后一行或指定return表达式(比如这里result=1000)。
一般with可以在viewholder中获取itemData的值的时候使用。

run:一般使用:

object.run{
//todo
}
val user = User("Kotlin", 1, "1111111")
val result = user.run {
    println("my name is $name, I am $age years old, my phone number is $phoneNum")
    1000
 }

通过代码可以看的出来,run结合了let和with两种使用特点,run既可以像let那样做判空处理,又可以像with那样直接使用对象的属性和方法。

apply:一般使用:

object.run{
//todo
}
val user = User("Kotlin", 1, "1111111")
val newUser= user.run {
      name = "lisi"
      age = 2
 }

apply的使用类似run,但是apply返回的类型是当前使用的对象,可用在对对象的初始化中。

also:一般使用:

val obj1 = object.also{
it.todo()//在函数体内使用it替代object对象去访问其公有的属性和方法
...
}

also的使用跟let很像,不同的是also返回的是使用对象本身,一般用于多个扩展函数链式调用


Kotlin基本语法_第1张图片
image.png

你可能感兴趣的:(Kotlin基本语法)