第一章主要讲环境配置。
第二章 kotlin的基本类型
2.1注释
单行注释: “//” 多行注释:“/*......*/”(多行注释可嵌套)
文档注释:“/**.......*/” dokka工具来生成API文档(github下载)
2.2变量
变量与常量的区别:变量可重新赋值,常量只能赋值一次
2.2.1分隔符:“;” 一行一条语句结尾可省略分号,一行多条语句在每天语句结尾用分号分开,建议一行一条语句方便阅读。一条语句可以跨多行,一个字符串一个变量不能跨行。
花括号“{” 和 “}” 方括号“[]” 圆括号“()” 空格“ ” 圆点 “.”
2.2.2 标识符规则
- 区分大小写:Myname 与 myname 是两个不同的标识符。
- 首字符:可以是下划线(_)或字母,但不能是数字。
- 除首字符外其他字符,可以是下划线(_)、字母和数字。(字符不仅包含26个字母还可以是中文、日文等等)
- 硬关键字(Hard Keywords)不能作为标识符,软关键字(Soft Keywords)、修饰符关键字(Modifier Keywords)在它们的适用场景之外可以作为标识符使用。
- 特定标识符 field 和 it。在 Kotlin 语言中有两个由编译器定义的特定标识符,它们只能在特定场景中使用有特定的作用,而在其他的场景中可以做标识符使用。
2.2.3 kotlin关键字
2.2.4 kotlin声明变量
- 变量先声明后使用,声明时需显示或隐式指定变量类型
- 表达式 var | val 变量名 [ :变量类型] [ =初始值 ]
- var 变量值可变 val 变量值不可变
- 局部类常量 在使用前赋值即可,类常量需初始化赋值或者构造赋值
2.3 整型
- Byte(8位),Short(16位),Int(32位),Long(64位)都继承了Number类,兼容java的基本数据类型和引用类型
- kotlin没指定类型时,整数型默认为Int类型
- kotlin是空安全语言,因此不接收null类型,若想存null值需使用Byte?,Short?,Int?,Long?
- 不带?会映射成java的基本类型,带?的会映射成java的引用数据类型
- 三个等号 === 表示比较对象地址,两个 == 表示比较两个值大小,基本数据类型比较的是数值(===比较只要值相等也是true),引用数据类型比较的是地址值(带?与不带?的区别)
- 进制:支持十进制、二进制(0b或0B)、十六进制(0x或0X),不支持八进制
- 为提高可读性,用“_”下划线做分隔符,也可在数值前添加0,例:val price = 001_234_321_333(包含浮点型)
- 字符串模板:${变量或表达式}
2.4浮点型
- Float(32位)与Double(64位双精度浮点型)类型,浮点数必须包含一个小数点,没指定类型默认为Double
- 表现形式:十进制形式5.12,51.2,512.0,科学计数形式5.12e2(5.12*10^2),5.12E2(5.12*10^2),512E2(51200是Int类型)也是浮点型的值
- 正无穷大(正数除以0.0),负无穷大(负数除以0.0),非数(0.0除以0.0或对负数开方)(不等于任何数包括自己)
2.5 字符型
- 三种表现形式:1.单个字符来指定字符型值—'A'、'0'、'9',2.转义字符表示表示特殊字符型值'\n'、'\t' , 3.Unicode值表示'u\XXXX',xxxx代表一个十六进制的整数
- 与java不同kotlin的Char类型不能当成整数值使用,例如:var a : Char = 'a',var b : Int = a (会报错),但在java中char a = 'a',int b = a 则 b 会被赋值为97;
2.6 数值之间的类型转换
- kotlin不会自动类型提升即不支持隐式转换,所有不同类型的变量不能直接赋值,需要通过方法toByte(), toShort(), toInt(), toLong(), toFloat(), toDouble(), toChar(), 例子:var price : Byte = 10; var day : Short = 12; price = day(错误),price = day.toByte() (正确)。注意大范围的值转小范围的值可能发生溢出。
- kotlin表达式中可以自动转换,例如:var price :Byte = 10;var day : Short = 12; var total = price + day ——》 会自动提升为Int类型,若有比Int更大的类型例如Long 则会自动提升为Long类型
- kotlin中Char类型不允许被当成整数值使用,但是允许整数值转换成Char类型,例如 var price : Int = 97, var c = price.toChar();这个转换是成立的,Char类型的可以加减一个整型值,也可以两个Char类型值进行加减
- 浮点型与整型的数值进行转换也需要用显示转换
- 表达式类型自动提升:所有Byte,Short类型将自动被提升到Int类型,类型等级Byte——》Short——》Int——》Long——》Float ——》Double
2.7 Boolean类型
- Boolean类型只有两种值true 和 flase 不能接受null,若要接受null 则需声明Boolean?
- 一般用做条件判断,如if语句,when语句,do while语句
2.8 Null 安全
- 也就加不加?类型,加了?代表可接收null类,没加代表不可接收,例如:var str = "A",var num : Int = str.toIntOrNull()报错,var num : Int ?= str.toIntOrNull() 正确
- 可空类型的变量不允许直接调用方法或属性,需先判断非空,也可用安全调用方法,即变量后加 ‘?’再调用方法或属性
- Elvis运算 “?:” 例子 var str : String? = "haha",var len1 = if (str!=null) str.length else -1; 用Elvis表达式 var len2 = str?.length ?: -1;
- 强制调用 “!!.” 例子:var str : String ? = "hahah", var len3 = str!!.length. 强制调用当变量为空时报NPE异常。
2.9 字符串
- kotlin字符串的每一个字符都是独立的Unicode字符串组成,可通过索引访问
- 分为转义字符串(与java字符串类似)、原始字符串(用""" """引起来 我的理解是带格式的字符串)
- 字符串的常用方法:toInt,toDouble...返回字符串前缀后缀方法commonPrefixWith/commonSuffixWith,contains支持正则表达式
2.10 类的别名
- typealias 类型别名 = 已有类名