Kotlin 笔记(三)
1.Kotlin语言的takeUnless内置函数
//takeIf 和takeUnless 功能是相反的
//name.takeIf {true/false} true返回本身 false返回null
//name.takeUnless {true/false} true返回null false返回本身
class Manager{private var infoValue:String?=nullfun getInfoValue()=infoValuefun setInfoValue(infoValue:String){this.infoValue=infoValue}
}
fun main(){val manager=Manager()manager.setInfoValue("sss")var r=manager.getInfoValue().takeUnless{it.isNullOrBlank()}?:"未经过任何初始化"println(r)
}
2.Kotlin语言的List创建与元素获取学习
fun main(){val list =listOf("Derry","Zhangsan","Lisi","Wang")//普通取值方式:索引 内部运算符重载[]==getprintln(list[0])println(list[1])println(list[2])println(list[3]) //索引有崩溃的风险//写KT代码 一定不会出现空指针异常,下标越界异常println(list.getOrElse(3){"越界"})println(list.getOrNull(1))println(list.getOrNull(4))println(list.getOrNull(111))//越界会返回空println(list.getOrNull(222)?:"越界")//小结:开发过程中,尽量使用getOrElse 或 getOrNull,才能体现KT的亮点
}
3.Kotlin语言的可变List学习
fun main(){//可变集合的应用val list=mutableListOf("Zhangsan","Wangwu","Derry")list.add("Zhaoliu")list.remove("Wangwu")println(list)//不可变集合val list2=listOf(123,456,789)//list2.add list2.remove 没有这两个函数val list3=list2.toMutableList()list3.add(111)list3.remove(123)println(list3)val list4=mutableListOf("A","B","C")list4.add("z")list4.remove("A")println(list4)val list5=list4.toList()println(list5)
}
3.Kotlin语言的mutator学习
fun main(){//1.+= -=val list=mutableListOf("Derry","DerryAll","DerryStr","Zhangsan")list+="李四" //mutator的特性 += -=其实就是运算符的重载list+="王五"list-="DerryStr"println(list)//2.removeIf//list.removeIf{true} //自动遍历整个可变集合,进行一个元素一个元素的删除list.removeIf{it.contains("Derry")} //过滤包含"Derry"的所有元素println(list)}
4.Kotlin语言的List集合的遍历
fun main(){val list =listOf(1,2,3,4,5,6,7)println(list) //不是遍历 //第1种for(i in list){println(i)}//第2种list.forEach{ //it==每一个元素 或者使用s代替it"s ->"println(it) //或者使用println(s)}//第3种list.forEachIndexed{item,i ->println("值是$i,下标是$item")}
}
5.Kotlin语言解构语法过滤元素学习
fun main(){val list=listOf("李元霸","李小龙","李连杰")val(value1,value2,value3)=listprintln("$value1,$value2,$value3")val(v1,v2,v3)=listprintln("$v1,$v2,$v3")//用下划线可以不接受赋值,节约一点性能val(_,n2,n3)=list//println(_) "_"下划线不是变量名,表示不接受赋值println("$n2,$n3")
}
6.Kotlin语言的Set创建与元素获取
fun main(){val set=setOf("Lisi","Wangwu","Zhaoliu","Zhaoliu") //set集合不会出现重复元素println(set)//set[0] 是不可取的 set是无序的println(set.elementAt(0))println(set.elementAt(1))println(set.elementAt(2))//println(set.elementAt(3)) 会崩溃 越界,去掉重复元素只有三个println(set.elementAtOrElse(3){"越界"}) //不会崩溃println(set.elementAtOrNull(4)?:"你越界了") //不会崩溃//小结 使用 list或set 集合,尽量使用,这种方式
}
7.Kotlin语言的可变Set集合
fun main(){val set=mutableSetOf("李元霸","李连杰")set+="哈哈哈"set-="李连杰"set.add("ahahha")set.remove("李元霸")println(set)
}
8.Kotlin语言集合转换与快捷函数学习
fun main(){val list=mutableListOf("Derry","Derry","Lisu","Zhaosi") //可以重复//List转Set 去重val set=list.toSet()println(set)//list 转Set 转 List 也能去重val list2=list.toSet().toList()println(list2)//快捷函数去重println(list.distinct()) //内部做了:先转变成可变的Set集合再转换成可变的List集合println(list.toMutableSet().toList()) //和上一句代码的效果是一样的
}
9.Kotlin种的数组类型
//数组
//IntArray intArrayOf
//DoubleArray doubleArrayOf
//LongArray longArrayOf
//ShortArray shortArrayOf
//ByteArray byteArrayOf
//FloatArray floatArrayOf
//BooleanArray booleanArrayOf
//Array<对象> arrayOf
fun main(){//1.intArrayOf val intArray =intArrayOf(1,2,3,4,5)println(intArray[0])println(intArray[1])println(intArray[2])println(intArray[3])println(intArray[4])//println(intArray[5]) 这句话会崩溃越界println(intArray.elementAtOrElse(5){-1})println(intArray.elementAtOrNull(5)?:"你越界了")//集合转数组val list=listOf('A','B','C')val charArray=list.toCharArray()println(charArray.getOrElse(5){'E'})//Array 没有类型怎么办 是面向对象相关的val objArray=arrayOf(File('AAA'),File("BBB"),File("CCC"))}
10.Kotlin语言Map的创建
fun main(){val mMap1=mapOf<String,Double>("Derry" to(534.4),"Kevin" to 454.5)val mMap2 =mapOf(Pair("Derry",545.4),Pair("Kevin",664.4))//以上两种方式等价
}
11.Kotlin语言读取Map的值
fun main(){val mMap=mapOf("Derry" to 123,"Kevin" to 654)//方式一 []println(mMap["Derry"])println(mMap["Kevin"])println(mMap["xxx"]) //找不到的返回null//方式二 getOrDefaultprintln(mMap.getOrDefault("Derry",-1))println(mMap.getOrDefault("Derry2",-1))//方式三 getOrElseprintln(mMap.getOrElse("xxx"){-1})//方式四 与Java一样 .get和[]是一样的效果 getValue会崩溃println(mMap.get("Derry2"))println(mMap.getValue("Derry2"))}
12.Kotlin语言Map的遍历
fun main(){val map =mapOf(Pair("Derry",123),Pair("Kevin",456),Pair("Leo",789))//第一种方式map.forEach{//it =每个元素 K和V//it ==Map.Entry<String,Int>println("K:${it.key},V:${it.value}")}//第二种方式map.forEach{key,value -> //把默认的it给覆盖了println("key:${key},value:${value}")}//第三种方式map.forEach{ (k,v) ->println("key:${k},value:${v}")}//第四种方式for(item in map){println("key:${item.key} value:${item.value}") }
}
13.Kotlin语言可变Map集合学习
fun main(){val map =mutableMapOf(Pair("Derry",123),Pair("Kevin",456),Pair("Leo",789))//下面是可变操作map+="AAA" to 111map+="VVV" to 1234map-="Kevin"map["ccc"]=888map.put("DDD",999) //put和[]等价//第二种方式 getOrPut //如果整个map集合里面没有 FFF的key,我就帮你先添加到map集合去,然后再从map集合中获取val r=map.getOrPut("FFF",){777}println(r)println(map["FFF"])//第三种方式 getOrPut() 如果写入的key存在了val r2=map.getOrPut("Derry"){666} //发现Derry的key已经有了,直接获取出来,相当于备用值666失效了println(r2)
}
14.Kotlin语言的 定义类与field关键字学习
class KtBase70{var name="Derry"var info="abcdefg ok is success"//field都会生成隐式代码 只需了解就可以
}fun main(){var r=KtBase70()r.name="Kevin"println(r.name)
}
15.Kotlin语言的 计算属性与防范静态条件
//get()和?.防范为空
class KtBase71{val number:Int=0/** Java背后的代码* private final int number=0;* public final int getNumber(){* return this.number;* }*///计算属性 下面这样写 覆盖了get函数的field//get()=field//set(value){// field=value//}//下方语句get() 覆盖了 field val number2:Intget()=(1..1000).shuffled().first() //从1到1000去除随机值 返回给getNumber2函数val info:String ?=null//防范静态条件 调用成员,可能为null,可能为空值,就必须采用防范静态条件fun getShowInfo() :String{//这种写法,就属于防范静态条件,我们可以看到很多专业人士使用//also永远都是返回info本身return info?.let{"最终info结果是$it"}?:"你原来是null,请检查代码"}
}
fun main(){println(KtBase71().number)//KtBase71().number=9 val没有set函数,只有get函数println(KtBase71().number2)println(KtBase71().getShowInfo())
}
16.Kotlin语言的主构造函数学习
//主构造函数 ,规范来说,都是增加_xxx的方式,临时的输入类型,不能直接用
//_name 等等,都是临时的类型,不能直接要弄,
class KtBase72(_name:String,_sex:Char,_age:Int,_info:String){ //主构造函数 ()写不写没有问题var name=_nameget()=field //默认是public,不能写成private get()=field 否则外部不能访问set(value){field=value}val sex=_sexget()=field//val 就不能用set()val age=_ageget()=field+1val info=_infoget() = "【${field}】"fun show(){//println(_name) 临时的输入类型,不能直接用//需要接收下来才能用println(name)}
}
fun main(){var p=KtBase72(_name="Zhangsan",_info="学习KT语言",_age=18,_sex='男')println(p.name)println(p.age)println(p.sex)println(p.info)
}
17.Kotlin语言的主构造函数里定义属性
class KtBase73(var _name:String,val _sex:Char,val _age:Int,var _info:String){}
fun main(){}
//定义的话直接再括号里把"var"写上就可以省去上一小节的批量代码了
18.Kotlin语言次构造函数学习
class KtBase74(name:String){//次构造,必须要调用主构造函数,否则不通过//为什么次构造必须要调用主构造//因为次构造函数有主构造函数统一管理,为了更好的初始化//这是2个参数的次构造函数constructor(name:String,sex:Char):this(name){println("2个参数的次构造函数 name:$name,sex:$sex")}//这是3个参数的次构造函数constructor(name:String,sex:Char,age:Int):this(name){println("3个参数的次构造函数 name:$name,sex:$sex,age:$age")}//这是4个参数的次构造函数constructor(name:String,sex:Char,age:Int,info:String):this(name){println("4个参数的次构造函数 name:$name,sex:$sex,age:$age,info:String")}
}
//name:String,sex:Char,age,Int,info:String
fun main(){val p =KtBase74("李元霸")KtBase74("张三",'男')//调用2个参数的次构造函数KtBase74("张三",'男',18)//调用3个参数的次构造函数KtBase74("张三",'男',18,"我是张三")//调用4个参数的次构造函数
}
19.Kotlin语言的构造函数种默认参数学习
class KtBase75(name:String="李元霸"){constructor(name:String="李连杰",sex:Char='男'):this(name){println("2个参数的次构造函数 name:$name,sex:$sex")}//这是3个参数的次构造函数constructor(name:String="李小龙",sex:Char='M',age:Int=33):this(name){println("3个参数的次构造函数 name:$name,sex:$sex,age:$age")}//这是4个参数的次构造函数constructor(name:String="李俊",sex:Char='W',age:Int=43,info:String="还在学习开发语言"):this(name){println("4个参数的次构造函数 name:$name,sex:$sex,age:$age,info:String")}
}
fun main(){val p =KtBase75("李元霸")KtBase75("张三",'男')//调用2个参数的次构造函数KtBase75("张三",'男',18)//调用3个参数的次构造函数KtBase75("张三",'男',18,"我是张三")//调用4个参数的次构造函数KtBase75() //到底是调用哪一个构造函数 是次构造还是主构造函数?优先调用主构造函数
}
20.Kotlin语言的init块学习
username,userage,usersex都是临时类型,必须要二次转换(声明var)
//没有声明var只能再init里运用
class KtBase76(username:String,userage:Int,usersex:Char){//初始化块 init代码块//这个不是Java的static{}//相当于java的{}代码块init{println("主构造函数被调用了$username")//如果第一个参数是false,就会调用第二个参数的lanmbda//判断name是否是空值
// require(username.isNotBlank()){
// "你的username空空如也"
// }require(userage>0){"你的年龄不符合要求"}require(usersex=='男'){"你的性别很奇怪"}}constructor(username:String) :this(username,87,'M'){println("此构造函数被调用了")}
}
fun main(){KtBase76("",userage=88,usersex='M')KtBase76("王五")
}
21.Kotlin语言的构造初始化顺序学习
//1. val sex:Char
class KtBase77(name:String,val sex:Char){//主构造//第二步:生成val mName //由于你是写在inint代码块前面,所以类成员和init代码块是同时生成的val mName=name;init{val nameValue=name //第三步:生成nameValue细节println("init代码块打印:$nameValue")}constructor(name:String,sex:Char,age:Int):this(name,sex){//第五步:生成此构造的细节println("次构造 三个参数的, name:$name,sex:$sex,age:$age")}//第四步val derry ="AAA"//纠正网上优秀博客的错误:类成员先初始生成,再init代码块初始生成//正确说法:init代码块和类成员是同时的,只不过你写在init代码块前边就先生成
}
fun main(){//调用次构造KtBase77("李元芳",'男',13)
}
22.Kotlin语言的延迟初始化lateinit学习
//1.lateinit responseResultInfo定义
//2.request 懒加载
//3.showResponseResult
//4.main 先请求 在显示
class KtBase78{lateinit var responseResultInfo:String; //不能用val,要不然怎么在后边延时初始化//我等会再给你初始化值fun request(){ //延时初始化,属于懒加载,用到你在给你加载responseResultInfo ="服务器加载成功,恭喜你"}fun showResponseResult(){//由于你给又给它初始化,所以只有用到它的时候会崩溃if(::responseResultInfo.isInitialized){println("$responseResultInfo")}else{println("你都没有初始化")}}
}
fun main(){val p=KtBase78()//使用它之前加载// p.responseResultInfo="嘿嘿"//使用它p.showResponseResult()
}
23.Kotlin语言的惰性加载by lazy学习
//lateinit是再使用的时候,手动加载的懒加载方式,然后再使用
//by lazy在使用的时候,自动加载,直接使用
class KtBase79(){//下面是不使用惰性初始化 by lazy 普通方式val database1=readSQLServerDatabaseAction()val database2 by lazy{readSQLServerDatabaseAction()}private fun readSQLServerDatabaseAction():String{println("开始加载读取数据库数据中....")println("加载读取数据库数据中....")println("加载读取数据库数据中....")println("加载读取数据库数据中....")println("加载读取数据库数据中....")println("加载读取数据库数据中....")println("加载读取数据库数据中....")println("结束加载读取数据库数据中....")return "database data load success ok."}
}
fun main(){val p=KtBase79()Thread.sleep(5000)println("最终显示:$p.databaseData1")val p=KtBase79()Thread.sleep(5000)println("最终显示:$p.databaseData2")}
24.Kotlin语言的初始化陷阱一学习
// class KtBase80{
// init{
// number=number.times(9)
// }
// var number=9
// }
// 上边的类是不可行的,没有初始化值init会报错
class KtBase80{var number=9init{number=number.times(9)}
}
fun main(){println(KtBase80().number)
}
25.Kotlin语言的初始化陷阱二学习
class KtBase81{var info:String
// init{
// getInfoMethod()
// info="DerryOK"
// }init{info="DerryOK"getInfoMethod()}fun getInfoMethod(){println("info:${info[0]}")}}
fun main(){println(KtBase81().getInfoMethod())
}
26.Kotlin语言的初始化陷阱三学习
class KtBase82(_info:String){
// val content:String = getInfoMethod()
// val info =_info
// fun getInfoMethod()=infoval info =_infoval content:String = getInfoMethod() fun getInfoMethod()=info
}
fun main(){println("内容的长度是:${KtBase82("Derry").content.length}")
}
Kotlin 笔记(三)相关推荐
- kotlin笔记第一阶段(变量语句函数)
kotlin笔记第一阶段(变量&语句&函数) 笔记所在视频地址 02.Kotlin语言成为Android第一语言 03.Kotlin语言和JVM虚拟机 04.学Kotlin语言的重要性 ...
- J2EE学习笔记三:EJB基础概念和知识 收藏
J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...
- 从Java到Kotlin(三)
本篇文章主要对比Java跟Kotlin中的类和接口的写法. 目录 一.类的声明 二.构造函数 三.函数的参数 四.创建类的实例 五.数据类 六.枚举类 七.属性 八.内部类 九.可见性修饰符 十.继承 ...
- tensorflow学习笔记(三十二):conv2d_transpose (解卷积)
tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...
- Ethernet/IP 学习笔记三
Ethernet/IP 学习笔记三 原文为硕士论文: 工业以太网Ethernet/IP扫描器的研发 知网网址: http://kns.cnki.net/KCMS/detail/detail.aspx? ...
- 深度学习入门教程UFLDL学习实验笔记三:主成分分析PCA与白化whitening
深度学习入门教程UFLDL学习实验笔记三:主成分分析PCA与白化whitening 主成分分析与白化是在做深度学习训练时最常见的两种预处理的方法,主成分分析是一种我们用的很多的降维的一种手段,通 ...
- AT91RM9200Linux移植笔记(三)-移植Linux kernel 2.6.17
AT91RM9200Linux移植笔记(三)-移植Linux kernel 2.6.17 手上板子原来自带的是2.4.19的内核, 打算移植新的2.6的内核,从网上下了2.6.17的kernel,下载 ...
- iView学习笔记(三):表格搜索,过滤及隐藏列操作
iView学习笔记(三):表格搜索,过滤及隐藏某列操作 1.后端准备工作 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django ...
- 吴恩达《机器学习》学习笔记三——多变量线性回归
吴恩达<机器学习>学习笔记三--多变量线性回归 一. 多元线性回归问题介绍 1.一些定义 2.假设函数 二. 多元梯度下降法 1. 梯度下降法实用技巧:特征缩放 2. 梯度下降法的学习率 ...
- mysql数据库权威指南_MySQL_MySQL权威指南读书笔记(三),第二章:MYSQL数据库里面的数 - phpStudy...
MySQL权威指南读书笔记(三) 第二章:MYSQL数据库里面的数据 用想用好MYSQL,就必须透彻理解MYSQL是如何看待和处理数据的.本章主要讨论了两个问题:一是SQL所能处理的数据值的类型:二是 ...
最新文章
- Linux cgroup机制分析之cpuset subsystem
- 【白话机器学习】算法理论+实战之AdaBoost算法
- objc_setAssociatedObject 关联的简单用法
- 求极大子矩阵的两种方法
- 除了要求app随手机壳颜色变之外,产品还要求....
- Vue.js 代码优化浅谈
- 粒子群PSO算法实验及其代码解释
- 计算机IP掩码的与运算,计算机IP地址与子网掩码如何进行AND运算
- Android 基础控件与线性布局
- 反击!紫光集团怒斥赵伟国
- 张建宁:“海阔天空”的物联网必须脚踏实地
- 运行jmockit时报错IllegalStateException
- java极光推送实例
- 谈谈区块链:深入理解软硬分叉
- wp android ios,WP系统的手机怎么样 WP7和Android、ios有何不同?
- 今日记录:.sh文件没有权限怎么解决
- HTC Touch HD单挑iPhone手机
- xtu oj 1405 世界杯
- 中科院集成电化学方法的表面等离子体共振及高通量分析仪器通过验收
- C++ 龙的传人游戏(正版)