美文网首页
kotlin基础复习总结

kotlin基础复习总结

作者: 壮壮闯天下 | 来源:发表于2020-09-28 13:42 被阅读0次

    一、定义常量/变量

    val  定义常量  getter

    var  定义变量  setter  getter

    lateinit  和 var配合使用,表示可以延迟初始化的变量;基础数据类型和val修饰的变量不能使用;

    「Kotlin 的基本数值类型包括 Byte、Short、Int、Long、Float、Double 等。不同于Java的是,字符不属于数值类型,是一个独立的数据类型」

    注意: ? 定义变量,表示可以为空;  eg: var name: String? = ""

        ? 变量后边,表示如果变量为空则不处理; eg:name?.length

        !! 变量后边,表示变量必然不能为空,如果为空则会抛出空指针异常;eg: name!!.length

    访问权限修饰符:

    private  只在本文件可见;

    protected  同一个文件和子类中可见;

    public    所有调用的地方都可见;

    internal  同一个模块中可见,表示这个类方法只适合当前module使用。

    二、定义类

    class/final class    定义一般类,默认定义类都是final 类;

    open  class  定义可以继承的类,可以继承类的中函数如果需要重写也需要添加open

    abstract class  定义抽象类,

    enum  class  枚举类

    object  静态类,方法和变量都是静态的;

    「衍生:companion  object  修饰为伴生对象,伴生对象在类中只能存在一个,类似于java中的静态方法 Java 中使用类访问静态成员,静态方法。相当于一个静态区域」

    inner class  内部类;内部类中调用外部 eg:this@Outer.param

    data  class  数据类;

    为了保证生成代码的一致性以及有意义,数据类需要满足以下条件:

    主构造函数至少包含一个参数。

    所有的主构造函数的参数必须标识为val 或者 var ;

    数据类不可以声明为 abstract, open, sealed 或者 inner;

    数据类不能继承其他类 (但是可以实现接口)

    sealed class  密封类,不能直接实例化,只能实例化子类;

    构造函数:

    主构造函数:写到类名后边  eg: class  object(var name:String)

    主构造器中不能包含任何代码,初始化代码可以放在初始化代码段中,初始化代码段使用 init 关键字作为前缀。

    次构造函数:类也可以有二级构造函数,需要加前缀 constructor;

    三、定义接口

    interface 

    允许方法有默认实现,

    接口中的属性只能是抽象的,不允许初始化值,接口不会保存属性值,实现接口时,必须重写属性;

    四、Lambda表达式

    这是Lambda表达式最完整的语法结构。

    {参数名1:参数类型,参数名2:参数类型 -> 函数体}

    () -> Unit//表示无参数无返回值的Lambda表达式类型

    (T) -> Unit//表示接收一个T类型参数,无返回值的Lambda表达式类型

    (T) -> R//表示接收一个T类型参数,返回一个R类型值的Lambda表达式类型

    (T, P) -> R//表示接收一个T类型和P类型的参数,返回一个R类型值的Lambda表达式类型

    (T, (P,Q) -> S) -> R//表示接收一个T类型参数和一个接收P、Q类型两个参数并返回一个S类型的值的Lambda表达式类型参数,返回一个R类型值的Lambda表达式类型

    1、首先最外层一对大括号。

    2、如果有参数传入Lambda表达式,我们还需要声明参数列表。

    3、参数列表的结尾使用->符号,表示参数列表的结束以及函数体的开始,函数体中代码长度不限

    4、Lambda表达式最后一行代码表示Lambda表达式的返回值。

      eg: val maxLengthFruit = list.maxBy({ fruit: String -> fruit.length })

    5、当Lambda是函数的最后一个参数时,可以将Lambda表达式移到函数的括号外面。

      eg: val maxLengthFruit = list.maxBy(){ fruit: String -> fruit.length }

    6、如果Lambda是函数的唯一参数的话,可以省略函数的括号。

      eg: val maxLengthFruit = list.maxBy{ fruit: String -> fruit.length }

    7、由于Kotlin拥有出色的类型推导机制,所以Lambda的参数列表大多数情况下不需要声明参数类型

      eg: val maxLengthFruit = list.maxBy{ fruit -> fruit.length }

    8、Lambda表达式只有一个参数时,也没必要声明参数名称,可以用it代替。

      eg: val maxLengthFruit = list.maxBy{ it.length }

    五、高阶函数

    高阶函数即指:将函数用作一个函数的参数或者返回值的函数。

    eg:    fun hightFun(x: Int, y: (Int,Int) -> Int){}

    相关文章

      网友评论

          本文标题:kotlin基础复习总结

          本文链接:https://www.haomeiwen.com/subject/rhuduktx.html