Kotlin-变量
val 表示 一个常量
var 表示一个变量
在kotlin中 ,一个变量不用声明具体类型,kotlin会自动根据变量指向的内容,推断出具体类型,但在变量声明的时候,一定需要赋初值。
Kotlin-函数
fun 为函数标识
name 函数名称
args 形式参数 (类似方法传入参数的变量名)
Array<String> 具体形参的类型
: Int 返回参数的类型(main方法没有返回参数,所以不用写)
{ new Obj ….. } 函数主体
在Kotlin中,main方法不用放在一个类里面,可以独立存在
Kotlin-函数的类型
无参无返回值、无参有返回值、有参无返回值、有参有返回值
Kotlin-数据类型
Kotlin中 没有基本类型和引用类型之分,所有的都是引用类型
但是,分为基本内置类型和,复杂内置类型
Kotlin-基本内置类型
Kotlin-异常处理
也存在try ,catch, finally
和java的处理机制一致,trye可能出现异常的代码,catch当发生异常,finally最终执行的
kotlin没有受检异常,不强制开发者进行try catch处理。
Kotlin 在catch 区域可以定义返回值,而java里面只能中断。(但是有些异常也会被中断,待查!)
Kotlin可以通过 try catch表达式 表示一个if else 的功能,并且将返回值直接返给一个变量。
Kotlin-三重引号
通过三重引号包括起来的字符串,可以根据实际的编辑排版,原样输出。
Kotlin-拓展函数
AnyClass:任意类
functionName:拓展函数的函数名
params:拓展函数的参数
receiverType:拓展函数的返回值
method body:拓展函数的方法体
通过任意类 点 自定义类名,方法体里面用this表示任意类进行调用该类的本有的方法。
Kotlin 里面出现拥有同名的拓展方法,那么会根据当前引用变量的类型,进行对应的静态调用(Java则不是,是根据具体子类对象类型,进行调用该子类的方法)
Kotlin 里面如果出现拓展函数与本类的函数名重名了,那么会优先调用本类的成员函数
案例:
假如我们“想获取字符串最后一个字符”,如果用java语言,我们可能需要会定义一个StringUtils的类,然后写一个getLastChar的方法:
使用Kotlin:
Kotlin-拓展属性
getter
setter
AnyClass:任意类
propertiesName:拓展属性名字
propertiesType:拓展属性类型
getter:拓展属性的getter方法
setter:拓展属性的setter方法
通过任意类 点 自定义属性名,可以重写gettsett方法。
Kotlin 五大内置委托之 Lazy()
当引用对象代理lazy()函数之后,该属性只会在被访问的时候执行一次初始化,且只会初始化一次。
Kotlin 五大内置委托之 Delegates.observable()
被该委托代理之后,属性的内容每当放生变化后,都会触发时间响应器
Kotlin 五大内置委托之 Vetoable
被该委托代理之后,属性的内容每当放生变化之前,根据自定义的条件true or false,决定是否存储新的值给当前属性
Kotlin 五大内置委托之 notNull
当属性被该委托代理后,属性允许后续赋值,但是使用的时候,一定要先赋值,不然抛出空异常
Kotlin 五大内置委托之 Map委托
将多个属性保存在一个map内,一个类的属性通过该类构造传入的map对象,实现相同key的 映射,在外部使用的时候,可以通过修改map对应的key值,实现修改该类属性对应key的值。(MutableMap具体实现类)
Kotlin之Object关键字
定义类的名字前面加上 object关键字,该对象就是一个单实例,相比java简化了复杂的初始化和单实例的实现过程。
在初始化的时候不用(),个人理解,该类名被object修饰时,已经初始化了,那么这个类型就相当于一个初始化的对象, 在赋值给变量时,直接用=赋值