01Kotlin基础知识
2021-09-10 13:05:36 0 举报
AI智能生成
Kotlin语言学习笔记与基础知识点讲解
作者其他创作
大纲/内容
?:加上?,就相当于一种广播,告诉所有的使用,在使用的时候,要注意,可能为空的情况,在使用的时候,要解决这个问题,不然是不能随便使用的。var name:String ? = \"Hello Kotlin\"name?.length
TODO 第一种补救措施,name如果真的为null,后面的不执行,就不会引发空指针异常。如:name?.length
第一种补救方法:
TODO 无论name是不是null,都执行,与java没有什么区别,当为null的时候,会报空指针异常。如:name!!.length
第二种补救方法:
TODO 与java中一样,进行null判断,之后在使用。如:if(name !=null) name.length
第三种补救方法:
var name:String ? =null
说明:当某个变量的值可以为 null 的时候,必须在声明处的类型后添加 ? 来标识该引用可为空
1.如何对Kotlin进行空检测机制
不用指定属性的具体类型,可以根据值进行自动推断
val name = \"qwety\"思考:Kotlin是静态语言,还是,动态语言?解析:因为在编译期就决定了,属性的类型,是String类型,所以答案:是静态语言。
2.Kotlin语言的val与var类型推断
fun add(){}上面就是一个完整的方法,他的返回值为Unit其中隐士的Unit == java void
类型推导
kotlin方法
kotlin中的方法与java的方法不同
3.Kotlin中的函数、方法与java的对比
各个语言精华集聚一身的新时代语言
Kotlin走的是全栈语言之路
4.学习Kotlin语言的重要性
var name :String = \"hxf\"var 可读可写name变量名String类型“hxf”值
可读可写变量声明
val name :String = \"hxf\"var 只读(与javafinal相似)name变量名String类型“hxf”值
只读变量声明
声明
String 字符串Char 单字符Boolean true/falseInt 整型Double 小数List 集合Set 无重复的元素集合Map 键值对集合
val info:String = “hxf”此时的String类型可以省略,因为kotlin语言会根据“hxf”这个字符串类自动推断info为String类型。
类型推断
内置类型
5.Kotlin语言声明变量与内置类型
Kotlin学习笔记1-5
StingDoubleIntFloatLongShortByteCharBoolean
编译时常量智能是长阳的基本数据类型
示例代码:const val PI = 3.1415fun main(){ val info = \"hxf\"//这个成为只读类型的变量 //提示:修饰符const不适用于 局部变量(const修饰符修饰的为编译时变量) //const val PI = 45}
编译时常量智能在函数之外定义,为什么呢?答:如果在函数内定义,就必须在运行时才能调用函数赋值,何来编译时常量一说。结论:编译时常量只能在函数之外定义,就可以在编译期间初始化了。
说明
kotlin语言:const val PI = 3.1415Java语言:public final static Double PI = 3.1415
6.Kotlin在编译时常量,const其实与java中的final static相似
点击 decompile 查看java代码
位置:Tool->Kotlin->show kotlin bytecode
因为要运行到JVM上,所以会给生成一个类来包含const编译时变量
7.如何查看Kotlin语言反编译后的字节码
Java有两种数据类型1、基本类型:int、double2、引用类型:String等
Kotlin语言kotlin中看起来都是引用类型,实际上编译器会在java字节码中,修改成“基本类型”
8.Kotlin语言的引用类型
var number:Int = 99if(number in 1.. 100){}
range 是范围 从哪里 到哪里?
9.Kotlin语言的range表达式
val week = 5val info when(week){ 1->\"今天是周二,非常的忙\" 2->\"今天是周三,也是很忙\" else ->{ }}如果不确定的时候,返回的类型就是any
1.Java的if是语句2.KT 的 if是表达式,是有返回值的
10.Kotlin中的when表达式
Kotlin学习笔记6-10
模板其实很简单,只不过在使用的时候,${name}这样使用
还有就是在内容里面添加if判断等如:${if (isLogin) \"成功\" else \"失败\"}
11.Kotlin语言的String模板
函数参数设置默认值
12.Kotlin语言的函数头/函数的默认值
Unit不写,默认也是有的,Unit代表五参数返回的 忽略类型 == Unit类型类Java语言的void关键字(void是 无参数返回的,忽略类型)
private fun dowork01():Unit{}上面是默认的有Unit的
13.Kotlin语言的Unit函数特点
示例代码:private fun show (number:Int){ when(number){ -1->TODO(\"没有这个事情\") in 0..59 ->println(\"分数不及格\") in 60..70->println(\"分数及格\") in 71..100->println(\"分数优秀\") }}
当所有的条件不满足的时候,就会执行TODO的Nothing函数,报错,并打印自己定义的内容。
14.Kotlin语言的Nothing类型特点
Kotlin学习笔记11-15
基本类型说明:在 Kotlin 中,所有东西都是对象,在这个意义上讲我们可以在任何变量上调用成员函数与属性。 一些类型可以有特殊的内部表示——例如,数字、字符以及布尔值可以在运行时表示为原生类型值,但是对于用户来说,它们看起来就像普通的类
数字说明:Kotlin 提供了一组表示数字的内置类型。 对于整数,有四种不同大小的类型,因此值的范围也不同
6.类型:Double大小(比特数):64最小值:最大值:
5.类型:Float大小(比特数):32最小值:最大值:
4.类型:Long大小(比特数):64最小值:最大值:
3.类型:Int大小(比特数):32最小值:最大值:
2.类型:Short大小(比特数):16最小值:-32768最大值:32767
1.类型:Byte大小(比特数):8最小值:-128最大值:127
所有以未超出 Int 最大值的整型值初始化的变量都会推断为 Int 类型。如果初始值超过了其最大值,那么推断为 Long 类型。 如需显式指定 Long 型值,请在该值后追加 L 后缀
例如:val one = 1 // Intval threeBillion = 3000000000 // Longval oneLong = 1L // Longval oneByte: Byte = 1
示例:(1-4)
对于以小数初始化的变量,编译器会推断为 Double 类型。 如需将一个值显式指定为 Float 类型,请添加 f 或 F 后缀。 如果这样的值包含多于 6~7 位十进制数,那么会将其舍入
例如:val pi = 3.14 // Doubleval e = 2.7182818284 // Doubleval eFloat = 2.7182818284f // Float,实际值为 2.7182817
示例:(5-6)
例如:val oneMillion = 1_000_000val creditCardNumber = 1234_5678_9012_3456Lval socialSecurityNumber = 999_99_9999Lval hexBytes = 0xFF_EC_DE_5Eval bytes = 0b11010010_01101001_10010100_10010010
(1)数字字面值中的下划线,使用下划线使数字常量更易读
在 Java 平台数字是物理存储为 JVM 的原生类型,除非我们需要一个可空的引用(如 Int?)或泛型。 后者情况下会把数字装箱注意数字装箱不一定保留同一性
例如:val a: Int = 100val boxedA: Int? = aval anotherBoxedA: Int? = aval b: Int = 10000val boxedB: Int? = bval anotherBoxedB: Int? = bprintln(boxedA === anotherBoxedA) // trueprintln(boxedB === anotherBoxedB) // false
例如:val a: Int = 10000println(a == a) // 输出“true”val boxedA: Int? = aval anotherBoxedA: Int? = aprintln(boxedA == anotherBoxedA) // 输出“true”
保留了相等性
(2)表示方式
例如:// 假想的代码,实际上并不能编译:val a: Int? = 1 // 一个装箱的 Int (java.lang.Integer)val b: Long? = a // 隐式转换产生一个装箱的 Long (java.lang.Long)print(b == a) // 惊!这将输出“false”鉴于 Long 的 equals() 会检测另一个是否也为 Long
由于不同的表示方式,较小类型并不是较大类型的子类型。 如果它们是的话,就会出现下述问题
例如:toByte(): BytetoShort(): ShorttoInt(): InttoLong(): LongtoFloat(): FloattoDouble(): DoubletoChar(): Char
每个数据类型都有以下转换
较小的类型不能隐式转换为较大的类型
(3)显示转换
例如:val x = 5 / 2//println(x == 2.5) // ERROR: Operator '==' cannot be applied to 'Int' and 'Double'println(x == 2)结果true
整数间的除法总是返回整数,但会丢弃小数部分
例如:val x = 5L / 2println(x == 2L)
对于任何两个整数类型之间的除法来说都是如此
(4)整数除法
例如:shl(bits)- 有符号左移shr(bits) -有符号右移ushr(bits) – 无符号右移and(bits) – 位与or(bits) – 位或xor(bits) – 位异或inv() – 位非
完整的位运算列表(只用于 Int 与 Long)
(5)位运算
例如:相等性检测:a == b 与 a != b比较操作符:a < b、 a > b、 a <= b、 a >= b区间实例以及区间检测:a..b、 x in a..b、 x !in a..b
(6)浮点比较
数字
例如:fun check(c: Char) { if (c == 1) { // 错误:类型不兼容 // …… }}
(1)字符用 Char 类型表示,它们不能直接当作数字。
例如:fun decimalDigitValue(c: Char): Int { if (c !in '0'..'9') throw IllegalArgumentException(\"Out of range\") return c.toInt() - '0'.toInt() // 显式转换为数字}
(2)字符字面值用单引号括起来: '1'。 特殊字符可以用反斜杠转义。 支持这几个转义序列:\\t、 \\b、\、\、\\'、\\\"、\\\\ 与 \\$。 编码其他字符要用 Unicode 转义序列语法:'\\uFF00'。
字符
(1)布尔用 Boolean 类型表示,它有两个值:true 与 false
例如:|| 短路逻辑或&& 短路逻辑与! 逻辑非
(2)内置的布尔运算
布尔
(1)数组在 Kotlin 中使用 Array 类来表示,它定义了 get 与 set 函数(按照运算符重载约定这会转变为 [])以及 size 属性,以及一些其他有用的成员函数
例如:// 创建一个 Array<String> 初始化为 [\"0\
(3)原生数组
数组
例如:kotlin.UByte: 无符号 8 比特整数,范围是 0 到 255kotlin.UShort: 无符号 16 比特整数,范围是 0 到 65535kotlin.UInt: 无符号 32 比特整数,范围是 0 到 2^32 - 1kotlin.ULong: 无符号 64 比特整数,范围是 0 到 2^64 - 1
无符号整型
(1)字符串用 String 类型表示,字符串是不可变的
例如:val text = \"\"\" |Tell me and I forget. |Teach me and I remember. |Involve me and I learn. |(Benjamin Franklin) \"\"\".trimMargin()
(2)可以通过 trimMargin() 函数去除前导空格
字符串
基本类型
例如:// 传统用法var max = a if (a < b) max = b// With else var max: Intif (a > b) { max = a} else { max = b} // 作为表达式val max = if (a > b) a else b
(1)Kotlin 中,if是一个表达式,即它会返回一个值。 因此就不需要三元运算符(条件 ? 然后 : 否则),因为普通的 if 就能胜任这个角色
例如:val max = if (a > b) { print(\"Choose a\") a} else { print(\"Choose b\") b}
(2)if的分支也可以是代码块,最后的表达式作为该块的值
if 表达式
例如:when (x) { 1 -> print(\"x == 1\") 2 -> print(\"x == 2\") else -> { // 注意这个块 print(\"x is neither 1 nor 2\") }}
(1)when 表达式取代了类 C 语言的 switch 语句
(2)如果 when 作为一个表达式使用,则必须有 else 分支, 除非编译器能够检测出所有的可能情况都已经覆盖了
When 表达式
例如:for (item in collection) print(item)代码块:for (item: Int in ints) { // ……}区间表达式:for (i in 1..3) { println(i)}for (i in 6 downTo 0 step 2) { println(i)}
(1)for 循环可以对任何提供迭代器(iterator)的对象进行遍历,这相当于像 C# 这样的语言中的 foreach 循环
For 循环
例如:while (x > 0) { x--}do { val y = retrieveData()} while (y != null) // y 在此处可见
(1)while 与 do..while 照常使用
While 循环
控制流
return默认从最直接包围它的函数或者匿名函数返回
break终止最直接包围它的循环
continue继续下一次最直接包围它的循环
Kotlin 有三种结构化跳转表达式
返回和跳转
基础
Kotlin基础知识
类与继承
属性与字段
接口
函数式(SAM)接口
可见性修饰符
扩展
数据类
密封类
泛型
嵌套类
枚举类
对象
类型别名
内联类
委托
委托属性
类与对象
函数
lambda表达式
内联函数
函数与lambda表达式
迭代器
区间与数列
序列
操作概述
转换
过滤
加减操作符
分组
单个元素提取
排序
聚合操作
集合写操作
List相关操作
Set相关操作
Map相关操作
集合
取消与超时
组合挂起函数
协程上下文与调度器
异步流
通道
异常处理与监督
共享可变状态与并发
Select表达式
协程
Kotlin 学习笔记 V1.1.6
0 条评论
回复 删除
下一页