kotlin基础复习总结

2020-09-28  本文已影响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){}

上一篇下一篇

猜你喜欢

热点阅读