Kotlin基础系列

260 阅读4分钟

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具体实现类)


KotlinObject关键字

定义类的名字前面加上 object关键字,该对象就是一个单实例,相比java简化了复杂的初始化和单实例的实现过程。

在初始化的时候不用(),个人理解,该类名被object修饰时,已经初始化了,那么这个类型就相当于一个初始化的对象, 在赋值给变量时,直接用=赋值