Kotlin入门教程史上最全最易于理解最全面的文章
Posted William_Tao(攻城狮)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin入门教程史上最全最易于理解最全面的文章相关的知识,希望对你有一定的参考价值。
这里写自定义目录标题
- 前言
- Kotlin学习笔记
前言
由于在自己面试过程中,经常被问到有没有学过kotlin,总感觉自己少了点东西,于是就花了一个多星期将最基本的kotlin知识点给学了一遍,本篇文章仅仅含有一点点android的知识,并不是学习Android的好文章,但是是最快入门kotlin的一篇全面的文章
,当然,我也希望大家与我共同学习进步,如果有什么疑问,或者经验交流,都可以加群QQ:1098392728
与我们交流。
更多好文章可以去浏览我的个人博客WilliamTao的博客
Kotlin学习笔记
1.val和var区别
val 可以理解为java中的final关键字,只能在声明的时候赋值
var 在任何时候都可以赋值
2.简单变量之间的转换
//Float --->Int
val orgin:Float = 65.0f
print(orgin.toInt())
3.数组变量的声明
kotlin中没有Stringarray,而是使用Array ,具体看下面的例子
fun main()
var int_arrary:IntArray = intArrayOf(1,2,3)
print(int_arrary)
var string_array:Array<String>=arrayListOf("hello","world")
其实,上面图片的内容都可以不用,直接使用Array 《》括起来就可以了
数组的获取,可以通过java的中括号,也可以使用get来获取
var string_array:Array<String>=arrayOf("hello","world")
Btn_test.setOnClickListener
var str :String=""
var i:Int = 0
while(i<string_array.size)
str=str+string_array.get(i)+","
i++
// str=str+string_array[i]+","
textView.text=str
println(str)
4.字符串
字符串与基本类型的转换
kotlin方便一点,便于记忆
var test:String="1"
println(test.toInt())
字符串常用方法
- indexOf
- substring
- split:在Java里返回的是String[],而在kotlin中返回的是List
- 通过下标获取某个位置的字符
var orgin:String ="he.llo.wor.ld"
var list:List<String> =orgin.split(".")
for(item in list)
print("----"+item+"*----")
var orgin:String ="hello,world"
var orgin_trim:String=orgin
if(orgin_trim.indexOf(",")>0)
orgin_trim = orgin_trim.substring(0,orgin_trim.indexOf(","))
println("orgin_trim--"+orgin_trim)
println(orgin[1].toString())
println(orgin.get(1).toString())
字符串模板及其拼接
$加变量,如果变量先需要进行计算,则需要加大括号
var name="William_Tao"
print("My name is $name ,and age is $name.length")
5.容器
Set
List
Map
公共方法
kotlin允许对容器进行初始化,而java不可以
集合Set/MutableSet
- 循环的方法:
- for
- 迭代器
//方法一
var setList: Set<String> = setOf("test", "second", "thrid")
for (item in setList)
println("名称: $item")
//方法二
var iterator = setList.iterator()
while(iterator.hasNext())
val item=iterator.next()
println("名称: $item")
//方法三
setList.forEach println("名称: $it")
缺点所在:
队列List/MutableList
var ListList: List<String> = listOf("test", "second", "thrid")
for (i in ListList.indices)
var item =ListList[i]
println("名称: $item")
list中还提供了两种排序的函数 分别为:
- sortBy
- sortedByDescending
ListList.sortedBy it.length
// ListList.sortedByDescending it.length
for (i in ListList.indices)
var item =ListList[i]
println("名称: $item")
映射Map/MutableMap
两种初始化的方法:
键值 to 键名
Pair(值 ,名)
var godMap:Map<String,String> = mapOf("苹果" to "Iphone 12","Android" to "VIVO")
var godMap2:MutableMap<String,String> = mutableMapOf(Pair("苹果" , "Iphone 12"), Pair("Android" , "VIVO"))
遍历(同前面那有三种一样,不过有点点区别),见下方
foreach需要 API 24 版本以上才行
//1
for(item in godMap)
println("键名:$item.key键值:$item.value")
//2
var iterator=godMap.iterator()
while(iterator.hasNext())
var item = iterator.next()
println("键名:$item.key键值:$item.value")
//3
godMap.forEach key, value -> "键名:$key键值:$value"
6.条件分支语句
简单分支
在kotlin中,对分支语句做了优化,
允许分支语句返回字符串
另外,kotlin没有三元运算
//方法一
var flag:Boolean=false
Btn_test.setOnClickListener
textView.text = if(flag==true)"flag is true"
else
"flag is false"
flag = !flag
//方法二,再一的基础上去掉{}
var flag:Boolean=false
Btn_test.setOnClickListener
textView.text = if(flag==true)"flag is true"
else
"flag is false"
flag = !flag
多路分支
注意与switch case之间的区别
- when 替代了 switch
- 数值 -> 代替了case
- else替代了default
- kotlin中每一个 分支自动跳出
- when -> 同样允许有返回值
- 在java中case后面只能引入常量,但是kotlin允许引入变量判断。
- 在java中case后面只能引入一个常量,如果有多个常量的话,就需要并列写多个,很麻烦,在kotlin中就对此进行了优化,具体见代码
- kotlin中的when ->也支持类型判断(is 变量类型)
//版本一
var count:Int =0;
Btn_test.setOnClickListener
when(count)
0 -> textView.text="你现在的数值为:0"
1 -> textView.text="你现在的数值为:1"
// else -> textView.text="你现在的数值为:default"
count = (count+1)%3
//最简化版本
var count:Int =0;
Btn_test.setOnClickListener
textView.text=
when(count)
0 -> "你现在的数值为:0"
1 -> "你现在的数值为:1"
else -> "你现在的数值为:default"
count = (count+1)%3
//引入变量可以通过
var count:Int=0
var one:Int =1
var tow:Int =2
Btn_test.setOnClickListener
when(count)
one -> textView.text="你现在的数值为:0"
tow -> textView.text="你现在的数值为:1"
// else -> textView.text="你现在的数值为:default"
count = (count+1)%3
koltin对于多个常量并列的优化
var count:Int=0
Btn_test.setOnClickListener
when(count)
1,3,5,7,9 -> textView.text="你现在的数值为:1,3,5,7,9当中的某个值"
in 10..15 -> textView.text="你现在的数值为:10..15当中的某个值"
else -> textView.text="你现在的数值为:default"
count = (count+1)%20
kotlin中的when ->也支持类型判断(is 变量类型)
var countType:Number;
var countNumb:Int=0
Btn_test.setOnClickListener
countNumb = (countNumb+1)%3
countType = when(countNumb)
0->countNumb.toLong()
1->countNumb.toFloat()
else ->countNumb.toDouble()
//when ->使用类型的判断
textView.text=when(countType)
//重点关注此段
is Long ->"is long"
is Float ->"is Float"
is Double ->"is Double"
else -> "is error"
7.循环处理
循环遍历
kotlin废除了for( int i=0;i<n;i++) 这种形式,并且kotlin提供了两种方式
- 变量 in …
- for(i in 容器.indices)
//方法一
var list:Array<String> = arrayOf<String>("朝辞白帝彩云间","千里江陵一日还","两岸猿声啼不住","轻舟已过万重山")
Btn_test.setOnClickListener
var poem:String=""
for(item in list)
poem = "$poem$item,\\n "
textView.text = poem
//方法二
var list:Array<String> = arrayOf<String>("朝辞白帝彩云间","千里江陵一日还","两岸猿声啼不住","轻舟已过万重山")
Btn_test.setOnClickListener
var poem:String=""
for(i in list.indices)
if(i%2==0)
poem = "$poem$list[i],\\n "
else
poem = "$poem$list[i]。\\n "
textView.text = poem
方法二所带来的问题
解决办法
kotlin引入了一些关键字,具体见下面代码(当然是用Java中的while,do —while都行)
//左闭右开,不包括2 16 ---65
for(i in 16 until 66)
println(i)
println("**********")
//每一步走4
for(i in 23..89 step 4)
println(i)
println("**********")
//从50开始递减到7
for(i in 50 downTo 7)
println(i)
//使用while
var list:Array<String> = arrayOf<String>("朝辞白帝彩云间","千里江陵一日还","两岸猿声啼不住","轻舟已过万重山")
var i:Int=0
while(i<list.size)
println(list[i]+"--")
i++
println("-----------")
i=0
do
println(list[i]+"**")
i++
while (i<list.size)
跳出多重循环
低配版本
//这里有空语句所以注意时Array<String?> 而非Array<String>
var list:Array<String?> = arrayOf("朝辞白帝彩云间",null,"千里江陵一日还",""," ","两岸猿声啼不住","轻舟已过万重山")
Btn_test.setOnClickListener
var poem:String=""
var pos:Int=-1
var count:Int=0
while(pos<=list.size)
pos++;
//判断是否为空或者是否是有空串或者空格串
if(list[pos].isNullOrBlank())
continue
if(pos%2==0)
poem = "$poem$list[pos],\\n "
else
poem = "$poem$list[pos]。\\n "
count++
//若合法行数达到4行,则跳出循环
if(count==4)
break
textView.text = poem
高配版 outside@
//这里有空语句所以注意时Array<String?> 而非Array<String>
var list:Array<String?> = arrayOf("朝辞白帝彩云间",null,"千里江陵一日还",""," ","两岸猿声啼不住","轻舟已过万重山")
Btn_test.setOnClickListener
var i:Int=0
var is_found =false
//给外循环加一个名叫outside的标记
outside@ while (i<list.size)
var j:Int=0
var item=list[i];
if (item != null)
while(j<item.length)
if(item[j] == '一')
is_found=true
break@outside
j++;
i++
8.空安全
字符串的有效性判断
声明可空变量
正常默认的变量都是非空的
可以为空的变量,可以在声明前在类型后面加问号
//能调用上面6中方法中的任意一个
var strNotNull:String=""
//只能调用 isNullOrEmpty 和 isNullOrBlank方法,因为其与方法需要求其长度,但可能为空,所以不可以调用后面4种方法
var strCanNull:String?=null
检验空值的运算符
var length_null:Int?
var A:String="123"
Btn_test.setOnClickListener
//表示为空时返回null,所以返回的变量必须被声明为可空类型
length_null = A?.length
//length_null = A?.length?:-1
//length_null = A!!.length
textView.text = length_null.toString()
9.等式判断
结构相等
凡是在Java中实现了equals函数的类,其变量均可在Kotlin中通过运算符“==”和“!=”进行等式判断
这种比较变量结构内部值的行为,kotlin称为结构相等,即模样相等
var helloHe:String="你好"
var helloShe:String="哈喽"
var flag:Boolean=false
var resultCont:Boolean=false
Btn_test.setOnClickListener
titile.text = "$helloHe 与$helloShe 的对比结果为:"
if(flag)
resultCont=helloHe==helloShe
content.text = "最后的对比结果为:$resultCont"
else
resultCont=<以上是关于Kotlin入门教程史上最全最易于理解最全面的文章的主要内容,如果未能解决你的问题,请参考以下文章