关键词:
文章目录
原创不易,希望能得到一个赞,感谢各位!
1、Kotlin 介绍
一丶Kotlin 是什么?
Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。除此之外Kotlin还可以编译成二进制代码直接运行在机器上(例如嵌入式设备或 iOS)。
Kotlin已正式成为Android官方支持开发语言。
二丶Kotlin 简介
2011年7月,JetBrains推出Kotlin项目,这是一个面向JVM的新语言 ,它已被开发一年之久。JetBrains负责人Dmitry Jemerov说,大多数语言没有他们正在寻找的特性,Scala除外。但是,他指出了Scala的编译时间慢这一明显缺陷。Kotlin的既定目标之一是像Java一样快速编译。 2012年2月,JetBrains以Apache 2许可证开源此项目。
Jetbrains希望这个新语言能够推动IntelliJ IDEA的销售。
Kotlin v1.0于2016年2月15日发布。这被认为是第一个官方稳定版本,并且JetBrains已准备从该版本开始的长期向后兼容性。
在Google I/O 2017中,Google宣布在Android上为Kotlin提供一等支持。
三丶为什么使用 Kotlin
- 简介(数据类扩展方法区间)
- 空值安全
- 100%兼容java scala
- 函数式编程 JDK1.8 lambda表达式
- 协程(thread)
- DSL(领域特定语言)
- 简洁: 大大减少样板代码的数量
- 安全: 避免空指针异常等整个类的错误
- 互操作性: 充分利用 JVM、Android 和浏览器的现有库
- 工具友好: 可用任何 Java IDE 或者使用命令行构建
四丶Kotlin 的发展
- Android 第一开发语言
- Springboot2.0第一开发语言
五丶Kotlin 的前景
- Kotlin script(gradle).kts
- Java虚拟机应用
Web kotlinee
javafx - 前端开发 kotlinjs
- Android开发
- 支持开发ios
- kotlin Native程序(完全抛弃JVM虚拟机)
全栈工程师
六丶Kotlin 应用场景
Web前端
Web后端
Android移动端
Server脚本
桌面游戏
七丶打印“Hello World”
fun main()
println("Hello World")
八丶学习资料
2、知识点总结
2.1、变量
Kotlin 变量
9/100
发布文章
qq_27494201
未选择任何文件
1丶语法规则、类型推导机制
Kotlin 支持类型推导机制,所以使用 val、var来声明变量
- 关键字:val
意思:声明一个不可变的变量
val age = 21;
- 关键字:var
意思:声明一个可变的变量
var name = "wangrui"
🔺Kotlin 虽然拥有类型推导机制,但是并不能满足延迟赋值的场景,如下:
所以,就诞生了显式声明变量类型这个东西
Kotlin 完全抛弃了 Java 中的基本数据类型,全部使用了对象数据类型。在 Java 中 int 是关键字,而在 Kotlin 中 Int 变成了一个类,它拥有自己的方法和继承结构。
如图: Java 和 Kotlin 数据类型对照表
学到这里,小伙伴们一定会有疑问
2丶为什么要有 val 和 var 这样的设定
- (1)为了解决 Java 中 final 关键字没有被合理使用的问题。
- (2)当项目越来越复杂,参与开发的人越来越多时,你永远不知道一个可变的变量会在什么时候被谁修改了,即使它原本不应该被修改,这就经常会导致出现一些很难排查的问题
3丶什么时候用 val,什么时候用var呢?
永远优先使用 val 来声明一个变量,而当 val 没有办法满足你的需求时再使用 var。这样设计出来的程序会更加健壮,也更加符合高质量的编程规范。
2.2、函数(普通函数)
1丶课前须知
大家阅读之前,要养成把方法理解为函数的习惯。在Kotlin中 主要强调函数,所以我们只要把方法理解为函数即可。其次Kotlin 真的把函数玩的特别强大,希望大家好好学习本节内容!
2丶语法规则
- 关键字:fun
3丶利用函数求两个数之间的最大值
fun main()
val num1 = 10;
val num2 = 20;
println(getMax(num1,num2))
fun getMax(num1:Int,num2:Int): Int
return max(num1,num2)
运行结果
代码分析:
上面的代码没什么难度,max() 函数是Kotlin 中的内置函数,返回的是两个参数里最大的数。
4丶Kotlin 语法糖
概念(很好理解,请用心阅读):当一个函数中只有一行代码时,Kotlin 允许我们不必编写函数体,可以直接将唯一的一行代码写在函数定义的尾部,中间用等号连接即可。
fun getMax(num1: Int,num2: Int): Int = max(num1,num2)
代码分析:
利用:语法糖: ‘ ’ 大括号去掉了,同时 return 也去掉了。
你以为这样就够简介了吗?不,往下看
fun getMax(num1: Int,num2: Int) = max(num1,num2)
代码分析:
利用:语法糖 + 类型推导机制,前面我们讲 Kotlin 变量 的时候,引入了这个概念,在赋值的时候 Kotlin 会智能推导出右边的类型。这样讲是不是瞬间就明白了上面的这行代码简化,所以我们这里可以直接省略掉返回值类型。
5丶总结
好啦,那么 函数(也叫:普通函数) 的基础知识我们就先讲到这里。后面还会有 标准函数、静态函数、扩展函数这些都是属于 Kotlin 的高阶函数,学习要一步一步慢慢来,把这篇的文章好好理解一下,代码好好敲一下再继续学下去!
《上一章》:Kotlin 变量
《下一章》:虚位以待,正在努力编写中!
2.3、内置类型
一丶基本类型
- 声明变量
- 声明变量(类型自动推导)
- 易混淆的 Long 类型标记
- Kotlin 的数值转换
- Kotlin 的字符串
声明变量
声明变量(类型自动推导)
易混淆的 Long 类型标记
Kotlin 的数值转换
Kotlin 的字符串
总结
二丶数组
- 区别
- 数组的创建
- 数组的长度
- 数组的读写
- 数组的遍历写法一
- 数组的遍历写法二
- 数组的包含关系
区别:
数组的创建:
数组的长度
数组的读写:
数组的遍历写法一:
数组的遍历写法二:
数组的包含关系:
package com.wangrui.kotlin
fun main()
// 方式一:创建一个可变长度的整型数组
val c0 = intArrayOf(1,2,3,4,5)
// 方式二:创建整型数组并且按照每个下标(0~4)依次+1 赋值给数组 c1
val c1 = IntArray(5)it + 1
// contentToString() — 将内容转换成字符串格式
println(c1.contentToString());
val c0 = intArrayOf(1,2,3,4,5);
// 创建整型数组并且按照每个下标(0~4)依次(坐标+1)*3 赋值给数组c1
val c1 = IntArray(5)(it + 1)*3
println(c0.contentToString());
println(c1.contentToString());
val a = IntArray(5)
// 得到集合长度
println(a.size)
val d = arrayOf("Hello","World")
d[1] = "Kotlin"
println("$d[0],$d[1]")
val e = floatArrayOf(1f,2f,3f,4f,5f)
// in—遍历
for (a in e)
println(a)
// array.foreach() 高阶函数遍历
//遍历集合e,并将每次循环得到的每个值赋给a,然后打印a
e.forEach a -> println(a)
三丶区间
- 区间的创建
- 开区间
- 倒序区间
- 区间的迭代
- 区间的包含关系
- 区间的应用写法一
- 区间的应用写法二
区间的创建
开区间
倒序区间
区间的迭代
区间的包含关系
区间的应用写法一:
区间的应用写法二:
package com.wangrui.kotlin
fun main()
// in—包含
if (1f in e)
println("包含")
if (20f !in e)
println("不包含")
//区间(正序)
val intRange = 1..10
val charRange = 'a'..'z'
val longRange = 1L..100L
val floatRange = 1f..2f
val doubRange = 1.0..2.0
// joinToString() — 加入并转成字符串,join — 加入
println(intRange.joinToString())
// toString() — 转成字符串
println(floatRange.toString())
// 止步——step
val intRangeWitStep = 1..10 step 2
val charRangeWithStep = 'a'..'z' step 2
val longRanWitStep = 1L..100L step 5
println(longRanWitStep.joinToString())
// 倒序区间
val intRangeReverse = 10 downTo 1
val charRangeReverse = 'z' downTo 'a'
val longRangeReverse = 100L downTo 1L
println(longRangeReverse.joinToString())
val array = intArrayOf(1,3,5,7)
//遍历方式1
// until — 直到,所以是 0 到 数组.size
for (i in (0 until array.size))
println(array[i])
//遍历方式2
// indices — 索引,所以 array[i] = 对应元素
for (i in array.indices)
println(array[i])
四丶集合框架
- 简介
- 集合框架的接口类型对比
- 集合框架的创建【List】
- 集合框架的创建【Map】
- 集合实现类服用与类型别名
- 集合框架的读写
- 集合框架的修改
- 集合框架的读写2
- 集合框架的读写3
- Pair
- Triple
- 思考题
简介
集合框架的接口类型对比
集合框架的创建【List】
集合框架的创建【Map】
集合实现类服用与类型别名
集合框架的读写
集合框架的修改
集合框架的读写2
集合框架的读写3
Pair
Triple
思考题
package com.wangrui.kotlin
fun main()
// 创建List集合的方式一:不能添加元素或者删除元素
val intList: List<Int> = listOf(1,2,3)
// 创建List集合的方式二:可以添加元素或者删除元素
val intList2: MutableList<Int> = mutableListOf(1,2,3)
// 创建Map集合的方式一:不能添加元素或者删除元素
// Any等价于Java中的 Object
// to 可以理解为:Key to Value
val map:Map<String,Any> = mapOf("name" to "benny","age" to 20)
// 创建Map集合的方式二:可以添加元素或者删除元素
val map2:Map<String,Any> = mutableMapOf("name" to "benny","age" to 20)
val stringList:MutableList<String> = mutableListOf("98","99","100","num:1","num:2")
// 对集合添加元素、删除元素
for (i in 0..10)
// 添加元素
// stringList += "num:$i" // 等价于 stringList.add("num:$i")
//结果为:[98, 99, 100, num:1, num:2, num:0, num:1, num:2, num:3, num:4, num:5, num:6, num:7, num:8, num:9, num:10]
// 删除元素
stringList -= "num:$i" // 等价于 stringList.remove("num:$i")
//当上面代码注释后,结果为:[98, 99, 100]
println(stringList)
// Map集合赋值
stringList[5] = "HelloWorld" //等价于 stringList.set(5,"HelloWorld")
val valueAt5 = stringList[5] // 等价于 String valueAt5 = stringList.get(5)
val map = HashMap<String,Int>()
map["Hello"] = 10
// '[]' 内的值实际上就是Key
println(map["Hello"])
// 解构:val (x,y) = pair
val pair = "Hello" to "Kotlin"
val pair2 = Pair("Hello","Kotlin")
val first = pair.first
val second = pair.second
println(first)
println(second)
// 解构:val (x,y,z) = triple
val triple = Triple("x",2,3.0)
val first = triple.first
val second = triple.second
val third = triple.third
println(first)
println(second)
println(third)
// 作业:
// 一、集合该如何遍历
val intNumber: List<Int> = listOf(1,2,3,4,5,6)
intNumber.forEacha -> println(a)
//二、集合的包含关系如何判断?
val intNumber2: List<Int> = listOf(1,2,3,4,5,6)
if (4 in intNumber2)
println("4包含于集合intNumber2")
if (400 !in intNumber2)
println("400不包含于集合intNumber2")
//三丶Scala 选择自己全新构建了一套集合框架,为什么 Kotlin没有?
五丶函数
- 函数的定义
- 函数的类型
- 函数的引用
- 变长参数 【Java】与 【Kotlin】版
- 多返回值
- 默认参数
- 默认参数 — 错误实例【X】
- 解决办法【√】— 通过:具名参数
1、函数的定义
2、函数的类型
3、函数的引用
4、变长参数
【Java】
【Kotlin】
多返回值
默认参数
默认参数 — 错误实例【X】
解决办法【√】— 通过:具名参数
package com.wangrui.kotlin.bennyhuo
fun main(vararg args: String)
// println(args.contentToString())
// 这时的x 为函数类型,具体为:(Foo, String, Long)->Any
val x:(Foo, String, Long)->Any = Foo::bar
val x0: Function3<Foo, String, Long, Any> = Foo::bar
//三者等价
// (Foo, String, Long)->Any = Foo.(String, Long)->Any = Function3<Foo, String, Long, Any>
// val y: (Foo, String, Long) -> Any = x
val y: Foo.(String,Long) -> Any = x
val z: Function3<Foo, String, Long, Any> = x
//调用yy函数,并传入x函数类型作为函数参数
yy(y)
//拿到 fun foo() 的引用
val f: ()->Unit = ::foo
//拿到 fun foo(p0: Int): String return "" 的引用
val g: (Int) ->String = ::foo
/**
* 拿到:
class Foo
fun bar(p0: String, p1: Long): Any
println("one:$p0 Long:$p1")
return ""
的引用
*/
val h: (Foo, String, Long)->Any
= Foo::bar
// 变长参数
multiParameters(1, 2, 3, 4)
//利用具名函数,将值准确传给 y: String
defaultParameter(y = "Hello")
//解构表达式
val (a, b, c) = multiReturnValues() //实现 伪多返回值的场景
val r = a + b
val r1 = a + c
// p:是一个函数类型,这个函数其实就是 Foo::bar
fun yy(p: (Foo, String, Long) -> Any)
p(Foo(), "Hello", 3L) // Foo()指的是:类的引用,调用对应函数,并进行传参
class Foo
fun bar(p0: String, p1: Long): Any
println("one:$p0 Long:$p1")
return ""
fun foo()
fun foo(p0: Int): String return ""
//利用具名函数,将值准确传给 y: String
fun defaultParameter(x: Int = 5, y: String, z: Long = 0L)
// 变长参数
fun multiParameters(vararg ints: Int)
println(ints.查看详情
kotlin语法总结-泛型的使用(代码片段)
怎样声明一个函数来判断两个参数是否相等呢?如果参数是Int类型,则函数声明如下:privatefunisEqualsInt(a:Int,b:Int):Boolean return(a==b)这个函数参数列表是两个Int类型,它只能比较两个Int类型参数是否相等... 查看详情
kotlin实战之letwithrunapplyalsotakeiftakeunlessrepeat源码总结(代码片段)
...是觉得将自己的云笔记分享出来吧~特别说明,kotlin系列文章均以Java差异为核心进行提炼,与Java相同部分不再列出。随着kotlin官方版本的迭代,文中有些语法可能会发生变化,请务必留意,语言领悟精髓... 查看详情
将app转换成100%kotlin总结(代码片段)
码字不易,转载请注明转自:http://blog.csdn.net/u011176685/article/details/52673390简书博客:http://www.jianshu.com/users/88579080227b题外话:国内社区逛多了,有点慢慢失去新鲜感。或许很多已经见多了.....推荐几个国外的网... 查看详情
kotlin语法总结:函数类型和高阶函数(代码片段)
Kotlin中每一个函数都有一个类型,称为“函数类型”,函数类型作为一种数据类型与基本数据类型在使用场景没有区别。可以声明变量,也可以作为其他函数的参数或者其他函数的返回值使用。函数类型函数类型就是... 查看详情
kotlin实战之面向对象特性全方位总结(代码片段)
...是觉得将自己的云笔记分享出来吧~特别说明,kotlin系列文章均以Java差异为核心进行提炼,与Java相同部分不再列出。随着kotlin官方版本的迭代,文中有些语法可能会发生变化,请务必留意,语言领悟精髓... 查看详情
kotlin实战之函数与lambda表达式总结(代码片段)
...是觉得将自己的云笔记分享出来吧~特别说明,kotlin系列文章均以Java差异为核心进行提炼,与Java相同部分不再列出。随着kotlin官方版本的迭代,文中有些语法可能会发生变化,请务必留意,语言领悟精髓... 查看详情
kotlin实战之泛型与逆变协变总结(代码片段)
...是觉得将自己的云笔记分享出来吧~特别说明,kotlin系列文章均以Java差异为核心进行提炼,与Java相同部分不再列出。随着kotlin官方版本的迭代,文中有些语法可能会发生变化,请务必留意,语言领悟精髓... 查看详情
kotiln基础语法总结(代码片段)
kotlin不仅支持编写在虚拟机上运行,而且还是一门跨平台的通用型语言,我们可以用Kotlin开发各种类型的原生应用,如Android,macOS,Windows,Javascript应用。Kotlin能脱离虚拟机层,直接编译成可以在Windows&... 查看详情
kotlin入门知识点总结常量,条件语句,string,方法,unit函数和nothing函数(代码片段)
...量2.条件语句2.1if/else2.2range2.3when3.String4.方法4.1默认传参4.kotlin字节码5.Unit函数6.Nothing参考材料从VIP课程2021-4-2kotlin专题,适合有java基础的人直接百度搜索码牛学院就可以找到1.变量常量和类型kotlin中,变量的定义是 查看详情
kotlin简单介绍以及使用总结(代码片段)
1.简介Kotlin是一种在Java虚拟机上运行的静态类型编程语言,被称之为Android世界的Swift,由JetBrains设计开发并开源。Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。在GoogleI/O2017中... 查看详情
将app转换成100%kotlin总结(代码片段)
...*************进入正题***********************************这只是关于Kotlin的一部分,点击这查看第二部分,在我讨论Kotlin语言设计的地方我已经关注Kotlin的发展有一段时间了,Kotlin是一个基于JVM,兼容Java的新的编程语言。随... 查看详情
kotlinjava对比学习总结(代码片段)
一、常量和变量 在java定义中定义变量;inta=2;a=35;doubleprice=19.28;price=20.88;在Kotlin中等价的定义变量:vara=2;a=35;varprice=19.28;price=20.88;Kotlin的只 查看详情
编程实践精华总结集锦系列2:springboot/maven/idea/java/kotlin/redis等等(代码片段)
GoQuickStart极简教程Go官网:https://golang.org/文档:https://golang.org/doc/开发环境配置下载Go:(官网)https://golang.org/dl/(国内镜像)https://golang.google.cn/dl/IDE:使用G 查看详情
金三银四必备,全面总结kotlin面试知识点(代码片段)
...很重视基础知识的考察,其中语言基础主要包括Java、Kotlin、C/C++三种编程语言。在小彭面试的经验中,发现很多同学的Kotlin语言能力只是停留在一些非常入门的语法使用上;在这篇文章里,我将为你浓缩总... 查看详情
2.7学习总结之androidjavatokotlin一(初识)(代码片段)
一、Kotlin的方便之处1、Kotlin可以直接使用id来呼叫操控相应的控件(textView.text="0" ) java(TextViewtextView = findViewById(R.id.textView; textView.setText("0"); ))原因:使用了Kotlin的扩展的功能,importkotlinx.androi... 查看详情
kotlin标准库函数总结(apply函数|let函数|run函数|with函数|also函数|takeif函数|takeunless函数)(代码片段)
...so标准库函数六、takeIf标准库函数七、takeUnless标准库函数Kotlin语言中,在Standard.kt源码中,为所有类型定义了一批标准库函数,所有的Kotlin类型都可以调用这些函数;一、apply标准库 查看详情
kotlin协程简介(代码片段)
1. 什么是协程关于协程的定义有很多,在Kotlin语言中,协程比较合理的定义应该是一个线程框架(扔物线)或者说是一种并发设计模式(官方)。它是由官方设计的一套API方便开发者进行多线程开发。2.协程能干什么协程主要... 查看详情