Kotlin 进阶之路(一) 编程基础
1.1 Kotlin 基本语法
- 代码基本格式
fun main(args:Array<String>){ println("it's just for fun") //HelloKotlin::class.constructors.map (::println) }
- kotlin 中严格区分大小写
- 编码规范可按照 Java 编码规范,使用驼峰式命名
- kotlin 编码风格最大区别于 Java 即语句结束不再需要写分号 ;
- 注释
Kotlin 中的注释和 java 中注释大体一样
- 单行注释 //
- 多行注释 /* 开头 */结尾
- 文档注释 /** 开头 */结尾
区别
Kotlin 中的多行注释可以嵌套单行注释,多行注释可以嵌套多行注释
fun main(args:Array<String>){ println("it's just for fun") /*HelloKotlin::class.constructors.map (::println) //println("hello world") /* println("test annotation") */ */ }
1.2 Kotlin 变量声明
- 变量定义
Kotlin 中的变量分为两种类型
- 可变变量 用关键字 var 修饰(对应 Java 中的普通变量)
- 不可变变量 用关键字 val 修饰(对应 Java 中的 final)
fun main(args:Array<String>){ var a : Int //声明一个Int类型的可变变量a val b : String //声明一个String类型的不可变变量b var c : Int = 1 var c1 = 1 //和上面的语句一样,Kotlin 会根据变量值自动识别数据类型 var d : Int d = 10 }
- 变量数据类型
Kotlin 中的数据类型分为 数值型、字符型、布尔型、数组型、字符串型
1.数值型变量
类型名 | 描述 | 占用空间 | 存储值范围 | 示例 |
Byte | 字节 | 8位(1个字节) | -2⁷ ~(2⁷ - 1) | var a : Byte = 1 |
Short | 短整型 | 16位(2个字节) | -2¹⁵ ~(2¹⁵ - 1) | var b : Short = 1 |
Int | 整型 | 32位(4个字节) | -2³¹ ~(2³¹ - 1) | var c : Int = 1 |
Long | 长整型 | 64位(8个字节) | -2⁶³ ~(2⁶³ - 1) | var d :Long = 1L |
Float | 浮点型 | 32位(4个字节) | 1.4E-45 ~ 3.4E+38 -3.4E+38 ~ -1.4E-45 |
var e : Float = 1f |
Double | 双精度浮点型 | 64位(8个字节) | 4.9E - 324 ~ 1.7E+308, -1.7E+308 ~ -4.9E - 324 |
var f : Double = 1.0 |
2.字符型变量
在 Kotlin 中用 “Char” 表示,每个字符类型变量会占用2个字节。给 Char 类型的变量赋值,需要使用 ‘’ 把字符括起来。
var a : Char = 'a' var b = 'b'
3.布尔型变量
在 Kotlin 中用 Boolean 表示,分别是 true 和 false
var a : Boolean = true var b = false
4.数组型变量
在 Kotlin 中数组用 Array 表示,类型包括 数值类型、布尔类型、字符类型。
两种初始化方式:
以数据类型 ArrayOf() 方法进行初始化
以 arrayOf() 方法进行初始化
var int_array : IntArray = intArrayOf(1, 2, 3) var boolean_array : BooleanArray = booleanArrayOf(true, false, true) var char_array : CharArray = charArrayOf('a', 'b', 'c')
注意: Kotlin 中不能使用 stringArrayOf() 方法创建字符串类型数组,因为 String 不属于基本数据类型。可以通过 Array,对应的初始化数组的方法也变成了 arrayOf()
var int_array : Array<Int> = arrayOf(1, 2, 3) var boolean_array : Array<Boolean> = arrayOf(true, false, true) var char_array : Array<Char> = arrayOf('a', 'b', 'c') var string_array : Array<String> = arrayOf("Hello", "Kotlin", "Fun") //变量的数据类型均可省略 //var int_array = arrayOf(1, 2, 3) //var boolean_array = arrayOf(true, false, true) //var char_array = arrayOf('a', 'b', 'c') //var string_array = arrayOf("Hello", "Kotlin", "Fun")
5.字符串型变量
Kotlin 中的字符串和 Java 中的字符串非常相似,使用 String 表示
var a : String = "Hello Kotlin" var a = "Hello Kotlin"
1.3 Kotlin 运算符
- 算术运算符
Kotlin 中的算术运算符就是用来处理四则运算的符号,也就是常见的加减乘除。
运算符 | 运算 | 范例 | 结果 |
+ | 正号 | +5 | 5 |
- | 负号 | b=6;-b | b=-6 |
+ | 加 | 4+4 | 8 |
- | 减 | 6-5 | 1 |
* | 乘 | 5*3 | 15 |
/ | 除 | 6/3 | 2 |
% | 取模(算术中的求余数) | 8%3 | 2 |
… | 范围 | a=1;b=a…2; | a=1;b=1…2 |
++ | 自增(前) | a=1;b=++a; | a=1;b=2 |
++ | 自增(后) | a=1;b=a++; | a=1;b=1 |
- - | 自减(前) | a=1;b=–a; | a=0;b=0 |
- - | 自减(后) | a=1;b=a–; | a=0;b=1 |
注意:
1.在进行除法运算时,当除数和被除数都为整数时,结果也是整数。若当中有小数参与,
得到的结果也会是小数。
var a = 3/2 //1 var b = 1.0/2 //0.5 var c = 1500/1000*1000 //1000
2.在进行取模运算时,运算结果的正负取决于(%左边的数)的符号
var a = (-1)%2 //-1 var b = 1%(-2) //1
3.自增 “++” 和自减 “–” 运算符,在操作数的左边则先加/减再引用,
在操作数的右边则先引用再加/减
- 赋值运算符
Kotlin 中的赋值运算符也遵循从左往右的运算顺序,将右边表达式的结果赋值给左边变量。
运算符 | 运算 | 范例 | 结果 |
= | 赋值 | a=6;b=5; | a=6;b=5; |
+= | 加等于 | a=6;b=5;a+=b; | a=11;b=5 |
-= | 减等于 | a=6;b=5;a-=b; | a=1;b=5 |
*= | 乘等于 | a=6;b=5;a*=b; | a=30;b=5 |
/= | 除等于 | a=6;b=5;a/=b; | a=1;b=5 |
%= | 模等于 | a=6;b=5;a%=b; | a=1;b=5 |
- 比较运算符
比较运算符用于对两个数值、变量或者表达式进行比较,结果为布尔值,true 或 false
运算符 | 运算 | 翻译 | 范例 | 结果 |
== | 等于 | == ; | a=6;b=5; a==b | false |
!= | 不等于 | != ; | a=6;b=5; a!=b | true |
< | 小于 | a.compareTo(b) < 0; | a=6;b=5; a < b | false |
> | 大于 | a.compareTo(b) > 0; | a=6;b=5; a > b | true |
<= | 小于等于 | a.compareTo(b) < =0; | a=6;b=6; a <= b | true |
>= | 大于等于 | a.compareTo(b) >= 0; | a=6;b=6; a >= b | true |
- 逻辑运算符
运算符 | 运算 | 范例 | 结果 |
! | 非 | !true | false |
!false | true |
&& | 短路与 | true&&true | true |
true&&false | false | ||
fasle&&false | false | ||
false&&true | false |
|| | 短路或 | true||true | true |
true||false | true | ||
fasle||false | false | ||
false||true | true |
注意:
- && 称为短路与,当运算符左边的值为 false 时,右边不进行运算
- || 称为短路或,当运算符左边的值为 true 时, 右边不进行运算
1.4 Kotlin 字符串
- 字符串声明
Kotlin 中用 String 表示字符串,定义如下
var str : String = "Hello Kotlin" var str = "Hello Kotlin"
- 字符串常用操作
1.字符串查找
Kotlin 中提供了多个查找函数, first()、 last()、 get(index),分别对应查找字符串的第1个、最后1个、具体角标为 index 的元素
fun main(args : Array<String>){ var str = "Hello Kotlin" println(str.first())// H println(str.last())// n println(str.get(3))// l println(str.indexOf('o'))// 4 println(str.lastIndexOf('o'))// 6 }
2.字符串截取
Kotlin 中截取字符串函数为 subString() 和 subSequence(),对应重载函数见下表
方法声明 | 功能描述 |
subString(startIndex : Int) | startIndex 为起始索引下标,从下标位置截取到字符串末尾,返回值为 String 类型 |
subString(startIndex : Int, endIndex : Int) | startIndex 为起始索引下标, endIndex 为结束索引下标,字符串从 startIndex 位置截取到 endIndex - 1 处的字符 |
subString(range: IntRange) | IntRange 表示 截取范围, 截取范围内的字符串 |
subSequence(startIndex : Int, endIndex : Int) | 与 subString() 类似,字符串从 startIndex 位置截取到 endIndex - 1 处的字符, 只不过返回值类型为 CharSequence |
subSequence(range : IntRange) | 与 subString() 类似,截取一定范围的字符串, 返回值类型为 CharSequence |
fun main(args : Array<String>){ var str = "Hello Kotlin" println(str.substring(3))// lo Kotlin println(str.substring(3, 7))// lo K println(str.subSequence(3, 7))// lo K println(str.substring(IntRange(3, 7)))// lo Ko println(str.subSequence(IntRange(3, 7)))// lo Ko }
3.字符串替换
Kotlin 中替换字符串函数为 replace()、replaceFirst()、replaceAfter()、replaceBefore()
fun main(args : Array<String>){ var str = "Hello World! Hello World!" println(str.replace("World", "Kotlin")) println(str.replaceFirst("World", "Kotlin")) println(str.replaceBefore("!", "Kotlin")) println(str.replaceAfter("Hello ", "Kotlin!")) /*Hello Kotlin! Hello Kotlin! Hello Kotlin! Hello World! Kotlin! Hello World! Hello Kotlin!*/ }
4.字符串分割
Kotlin 中字符串分割函数为 split()
fun main(args : Array<String>){ var str = "hello.kotlin" val split = str.split(".") println(split) //[hello, kotlin] var test = "hello.kotlin/world" var splitTest = test.split(".", "/") println(splitTest) //[hello, kotlin, world] }
5.字符串去空格
Kotlin 中字符串去空格函数为 trim()、 trimEnd()等,分别去除前面、后面的空格
fun main(args : Array<String>){ var str = " Hello Kotlin! " println(str.trim()) println(str.trimEnd()) //Hello Kotlin! // Hello Kotlin! }
6.字符串字面值
字符串的字面值是一串字符常量,字符串字面值常量是用双引号括起来" "的零个或多个字符,
如"hello". Kotlin 中有两种类型的字符串字面值,一种是转义字符串,可以包含转义字符,另一种是
原生字符串,可以包含转义字符、换行和任意文本。
- 转义字符串
转义采用传统的反斜杠 “” 方式将字符进行转义,
比如 \t, \b, \n, \r, ', ", \, \¥
fun main(args : Array<String>){ var str = "您\n好" println(str) //您 //好 }
- 原生字符串
原生字符串是使用 3 对引号( “”" “”" )把所有字符括起来,原生字符串可以有效地保证字符串中原有
内容的输出,即使原生字符串中包含转义字符串也不会转义。
fun main(args : Array<String>){ //转义字符串 var str1 = "您\n好" println(str1) //原生字符串 var str2 = """您 \n 好""" println(str2) /*您 好 您 \n 好*/ }
7.模版表达式
字符串可以包含模版表达式,所谓模板表达式就是在字符串中添加占位符,字符串模版表达式由
变 量 名 / 函 数 / 表 达 式 组 成 , 也 可 以 省 略 , 例 如 " {变量名/函数/表达式} 组成,也可以省略{}, 例如 "变量名/函数/表达式组成,也可以省略,例如"变量名"。
- 在字符串中,使用模板标识式存储字符串的值
fun main(args : Array<String>){ var a = 1 //语法格式 ${变量} var s1 = "a is ${a}" //可以省略大括号 var s2 = "a is $a" println(s1) println(s2) //a is 1 //a is 1 }
- 在字符串中,使用模板表达式调用其它方法
fun main(args : Array<String>){ //语法格式 ${方法()} println("${helloWorld()}") //hello world } fun helloWorld() : String{ return "hello world" }
- 在字符串中,使用模版表达式执行替换操作
fun main(args : Array<String>){ var s2 = "a is 1" //语法格式 ${表达式}, 执行表达式 var s3 = "${s2.replace("is", "was")}" println(s3) //a was 1 }
- 在原生字符串中,使用模版表达式输出 $ 需要使用 KaTeX parse error: Expected '}', got 'EOF' at end of input: {''}, 因为原生字符串不支持反斜杠转义
fun main(args : Array<String>){ var price = """${'$'}8.88""" println(price) //$8.88 }