改不完的 Bug,写不完的矫情。公众号小木箱成长营现在专注移动基础平台开发、涵盖音视频、APM和信息安全等各个知识领域;只做全网最 Geek 的公众号,欢迎您的关注!精彩内容不容错过~
一. kotlin 简介
Kotlin 拥有强大的生态,因为 Kotlin 是一门跑在 Java 虚拟机上的函数式语言,完全符合 JVM 的设计规范,如: 类型擦除,装箱和拆箱等等。所以也可以像 Java 一样支持 Android 原生环境开发,服务端,甚至大前端方向。那么 Kotlin 和 Java 有什么共同点呢?
二. kotlin 和 java8 的相同点
kotlin 和 java8 的相同点我总结了三个,第一个是: 它们都是面向对象和函数式编程语言,第二个是: 它们都是强类型静态语言,最后一个就是它们都符合 JVM 设计规范
说完共同点我们再聊聊他们的不同点吧~
三. kotlin 和 java8 的不同点
kotlin 和 java8 的不同挺多的,我简单的归纳了一下:
- Kotlin 可以用操作符简洁的判空
- Kotlin 不需要 findViewById
- Kotlin 默认给你写好 setter 和 getter 方法了
- Kotlin 去掉了 static 关键字
- Kotlin 进行 自动强制类型转换
- Kotlin 省去了 类型推断
- Kotlin 不支持类型检查
- Kotlin 有协程支持
四. kotlin 和 java 互转
4.1 kotlin 转 java
选中导航栏: 右键 -> Tools -> Kotlin -> Show Kotlin Bytecode -> Decompile
4.2 java 转 kotlin
选中文件标签: 右键 -> Convert Java File To Kotlin File
查看 Kotlin 字节码
五. Kotlin 基础语法
5.1 kotlin 方法
5.1.1 kotlin 方法声明
Kotlin 定义方式比较简单,括号中是参数,格式: "函数名(参数名称: 参数): 返回类型",返回类型定义在括号外 如:T
5.1.2 kotlin 方法调用
5.1.3 kotlin 方法自动传参
Kotlin 可以在 构造方法或者相关函数大括号里面设置默认参数,这样传参就可以使用默认参数了,我们具体看看怎么使用的吧~
第二个参数可以省略,此时会使用默认值
不省略时跟 Java 无异
5.1.4 kotlin named argument
named argument 的中文含义是 可以根据 参数名 进行传递参数,传参顺序不需要严格按照函数定义顺序,这样就可以避免参数误传的问题了
5.2 kotlin 变量和常量
varible(变量) 通过 var 关键字来声明,格式为 var 变量名[:类型] = [初始值]
- val 声明的变量是只读变量,它的引用不可更改,事实上我们依然可以更改其中引用对象的可变成员
- const 相当于 java 里面的 final,表示一旦初始化便立即被主内存看到,不能被二次赋值
当然 kotlin 也有自动拆箱和装箱将 Int 翻译成 Java 的 int 或 Integer 以提高性能
Kotlin 会自动给属性加上 setter 和 getter 方法
用 Show Kotlin Bytecode 翻译一下结果如下:
如果想重写 set() 或 get() 方法 可以这么做

5.3 kotlin null 判断
以上声明的变量皆为非空变量,即不允许为空值。如果需要声明一个变量可为空,仅需在变量类型后面加上?
声明一个变量可为空,仅需在变量类型后面加上?
5.4 kotlin 字符串模板
5.5 kotlin 双冒号操作符
双冒号操作符 表示把一个方法(变量)当做一个参数,传递到另一个方法(变量)中进行使用,和 Java8 类似
5.6 kotlin 匿名函数
kotlin 正常函数
kotlin 匿名函数
5.7 kotlin lambda 语法糖
5.8 kotlin 表达式
5.8.1 kotlin for 循环 和 范围 表达式
5.8.1.1 kotlin for 循环
5.8.1.2 范围 表达式
5.8.2 kotlin 枚举和 when 表达式
5.8.2.1 kotlin 枚举
Kotlin 中,枚举类型以类的形式存在,因此叫做枚举类,详细代码如下:
5.8.2.2 kotlin when 表达式
when 表达式 可以支持自动转型(Auto-casting),详细代码如下:
5.8.3 kotlin 中缀表达式
kotlin 中缀表达式只有一个参数,且用 infix 修饰的函数,这就是我们所说的自定义运算符的中缀表达式,详细代码如下:
5.8.3 kotlin 复合表达式
5.8.3.1 '?.'
?.表示,如果 foo 这时候是一个空的,则返回 null,否则就返回 foo.bar(),详细代码如下:
5.8.3.2 '?:'
?: 作用是当数据非空时,直接返回数据,而当数据为空时,返回合并到的数据。利用该运算符,可以很容易的把可空类型转换为非空类型,详细代码如下:
5.8.3.3 '!!'
Kotlin 中 !! 表示非空断言运算符,详细代码如下:
5.8.3.4 'as?'
Kotlin 可以使用安全转换操作符 as?,它可以在失败时返回 null,详细代码如下:
5.8.3.5 '?'
?表示可空类型与非空类型,Kotlin 的类型系统旨在消除来自代码空引用的危险,详细代码如下:
六. Kotlin 面向对象
6.1 kotlin 继承和构造
kotlin 中继承全部使用“:”,不区分 extend 或 implement,但是有几个规则需要注意一下:
6.2 kotlin 类
6.2.2 kotlin object 类
object 全局声明的对象只有一个,所以他是天生的单例模型
6.2.2 kotlin data 类
在 Kotlin 里面声明一个 data 类需要满足以下条件:
- data 类必须要有一个构造方法,且包含至少一个参数
- 该 data 类构造参数强制使用 val 或 var 进行声明
- data class 之前没有 abstract , open 或 inner 进行修饰
6.2.3 kotlin 内部类
6.3 kotlin 接口
6.4 kotlin 伴生对象
6.5 kotlin 修饰符
6.5.1 限制修饰符
- val 翻译成字节码就是 final
- private
- internal
- by
Kotlin 中 by 关键字用来简化实现代理 (委托) 模式,不仅可以类代理,还可以代理类属性, 监听属性变化
6.5.2 可见修饰符
嵌套类的用法: 如果要在 Kotlin 中嵌套一个类,需要在该内部类加 inner 修饰
七. 总结
本文先从 kotlin 概念带大家进入 kotlin 语言,然后说了一下 kotlin 和 java8 的异同以及相互转换方式,最后对 Kotlin 基础语法进行一一阐述,如: kotlin 方法和变量使用,kotlin 字符串模板, lambada 表达式,以及各种表达式的实际运用。好了今天的 kotlin 就说到这里了,如果大家对此有什么疑问欢迎到评论区留言~
各位看官,看都看了,帮忙点个赞呗~
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/7250.html