kotlin语法

发布时间 2023-04-21 11:21:38作者: cps666

本文由 简悦 SimpRead 转码, 原文地址 zhuanlan.zhihu.com

kotlin语法

残枫cps残枫cps

​目录收起语法基础kotling语言和JVM虚拟机声明变量和内置数据类型只读变量类型推断编译时常量kotlin反编译后字节码kotlin生成字节码文件之后,交给jvm运行,和java一样工具步骤:tools -> kotlin -> show totlin bytecode引用类型range表达式when表达式String模版函数头函数参数的默认参数Unit函数特点Noting类型特点反引号函数名特点匿名函数函数类型&隐式返回 :先声明函数,然后实现该函数函数参数it关键字特点:函数中参数只有一个时,it相当于所传参数匿名函数的类型推断:其实就是var method = 方法的实现lambda在函数中定义参数是函数:kt中可用于函数回调,但是在java中回调需要定一个的interface函数内联:inline,有函数参数是lambda为参数函数引用 :: 函数类型作为返回类型匿名函数和具名函数可空性特点安全调用操作符: ?. 为null的时候,调用代码不执行,后面是代码是可执行的let的安全调用非空断言操作符特点对比使用if判断null值情况空合并操作符语法中异常处理与自定义异常特点先决条件函数subString:截取字符串split:分割replace完成加密解码=比较操作 字符串常量池字符串遍历数字类型的安全转换函数Double转Int与类型格式化内置函数apply内置函数:始终返回本身let内置函数 run内置函数with内置函数also内置函数takeIf内置函数 takeUnless内置函数集合List创建于元素获取可变List集合:MutableListmutator函数集合遍历解构语法过滤元素Set创建于元素获取可变Set:MutablseSet集合转换与快捷函数数组类型Map的创建读取Map的值Map遍历可变Mapclass类主构造函数次构造函数初始化块:主构造函数的方法体延迟初始化lateinit 惰性初始化by lazy初始化陷阱继承与重载的open关键字类型转换智能类型转换Any超类 == java Object对象声明:object 单例对象表达式伴生对象:companion object == Java内部静态类 kt中没有static静态内部类与嵌套类数据类copy函数解构声明运算符重载枚举类枚举类定义函数代数数据类型密封类数据类使用条件接口定义接口的默认实现抽象类范型范型类定义范型函数范型变换范型类型约束vararg关键字out-协变 in-逆变reified关键字扩展函数定义扩展函数范型扩展函数扩展属性可空类型扩展函数infix关键字 中缀函数扩展文件 iterable 扩展函数组成的文件,调用的时候import引用重命名扩展:把引用的扩展函数重新命名,简化函数名DSL:领域专用语言变换函数map变换函数flatmap过滤函数filter合并函数函数式编程Java与kt调用 可空性单例模式注解@JvmName :编译时修改类的名字,方便Java的调用@JvmFeild:val类成员上面,可以去除类成员get方法,改成public修饰@JvmOverLoads 把多参数的函数方法重载,Java调用时就可以不用管kt函数的默认参数@JvmStatic 把一个在伴生匿名对象里的函数变成一个静态函数,方便java调用手写rxJava

语法基础

kotling语言和JVM虚拟机

声明变量和内置数据类型

只读变量

类型推断

编译时常量

kotlin反编译后字节码

kotlin生成字节码文件之后,交给jvm运行,和java一样

工具步骤:tools -> kotlin -> show totlin bytecode

引用类型

range表达式

when表达式

String模版

函数头

函数参数的默认参数

具名函数参数:调用方法不用按特定的顺序

Unit函数特点

Noting类型特点

反引号函数名特点

这个可以写含有中文和数字的的方法;调用java方法,但是在kotlin中方法名字是关键字,可以把方法名用这个 包起来就可以调用了

匿名函数

函数类型&隐式返回 :先声明函数,然后实现该函数

函数参数

it关键字特点:函数中参数只有一个时,it相当于所传参数

匿名函数的类型推断:其实就是var method = 方法的实现

lambda

在函数中定义参数是函数:kt中可用于函数回调,但是在java中回调需要定一个的interface

kotlin的写法如下:

java的写法如下:

函数内联:inline,有函数参数是lambda为参数

函数引用 ::

函数类型作为返回类型

匿名函数和具名函数

Java的写法:

可空性特点

安全调用操作符: ?. 为null的时候,调用代码不执行,后面是代码是可执行的

let的安全调用

非空断言操作符特点

对比使用if判断null值情况

空合并操作符

语法中异常处理与自定义异常特点

先决条件函数

判断null,抛出异常:checkNotNull requireNotNull
判断false,抛出异常:require

subString:截取字符串

split:分割

replace完成加密解码

=比较操作 字符串常量池

name1和name2是用一个引用,因为:字符串常量池,创建了第一个字符串,创建第二个同样的值时,不会新建,所以name1和name2是同一个引用。

上面图中的输出值为false

字符串遍历

数字类型的安全转换函数

Double转Int与类型格式化

toInt()是取下取整数,去除小数点后面的;图中有错误

内置函数


apply内置函数:始终返回本身

let内置函数

run内置函数

with内置函数

also内置函数

takeIf内置函数

takeIf(boolean) 如果boolean为true,则返回this本身,否则null

takeUnless内置函数

集合

List创建于元素获取

可变List集合:MutableList

mutator函数

集合遍历

解构语法过滤元素

Set创建于元素获取

可变Set:MutablseSet

集合转换与快捷函数

数组类型

Map的创建

读取Map的值

Map遍历

可变Map

class类

主构造函数

次构造函数

初始化块:主构造函数的方法体

构造初始化顺序 :(生成的字节码文件顺序:类成员先声明(可以直接赋值) -> 执行init{}里面的内容 -> 写在init{}后天面的类成员有赋值的再赋值; )

延迟初始化lateinit

惰性初始化by lazy

普通方式

by lazy :懒汉式

初始化陷阱

继承与重载的open关键字

kt类class默认public final 修饰,所以不能被继承
kt中函数默认public final 修饰,所以不能被重写

类型转换

智能类型转换

Any超类 == java Object

对象声明:object 单例

对象表达式

伴生对象:companion object == Java内部静态类 kt中没有static静态

内部类与嵌套类

数据类

copy函数

解构声明

运算符重载

枚举类

枚举类定义函数

代数数据类型

密封类

数据类使用条件

接口定义

接口的默认实现

抽象类

范型

范型类定义

范型函数

范型变换

范型类型约束

vararg关键字

out-协变 in-逆变

reified关键字

扩展函数

定义扩展函数

范型扩展函数

扩展属性

可空类型扩展函数

infix关键字 中缀函数

扩展文件 iterable 扩展函数组成的文件,调用的时候import引用

重命名扩展:把引用的扩展函数重新命名,简化函数名

DSL:领域专用语言

变换函数map

变换函数flatmap

过滤函数filter

合并函数

函数式编程

Java与kt调用 可空性

单例模式

饿汉式

kt : object ClassName
懒汉式

懒汉式加锁 :防止多线程 synchronized

懒汉式 volatile 线程安全

注解

@JvmName :编译时修改类的名字,方便Java的调用

@JvmFeild:val类成员上面,可以去除类成员get方法,改成public修饰

@JvmOverLoads 把多参数的函数方法重载,Java调用时就可以不用管kt函数的默认参数

@JvmStatic 把一个在伴生匿名对象里的函数变成一个静态函数,方便java调用

手写rxJava

编辑于 2023-04-17 13:58・IP 属地山东Kotlin编程语言Scala​赞同​添加评论​分享​喜欢​收藏​设置赞同​分享