2. 变量与常量
//声明常量关键字
val str: String = "this is a constant";
//声明常量关键字
var str: String = "this is a varible";
3. 函数
//声明函数
fun functionName(oneNum:Int,twoNum:String):Int{
return 0
}
4. 流程控制
-
顺序
-
分支
- 关键字:if\when
- when是switch的替代,但拥有更强的语法
//与switch相似
when(num){
1 -> doSomething()
2 -> doOtherSomething()
else -> onhing()
}
//when的特殊用法
when(num){
num > 5 -> println("num>5")
num < 5 -> println("num<5")
else -> println("num=5")
}
-
is 关键字 相当于java中instanceof
-
循环
- 关键字 for,for-in
- 表示整数集合(数学)
- 0 .. 10 -> [0,10]
- 0 until 10 -> [0,10)
- 0 downTo 10 -> [10, 0]
- step 2 -> 表示步长
for (i in 0 .. 10){
println(i)
}
- 语法糖
- if/when会以每个条件的最后一行作为返回值
- 函数中只有一行是可以不写“{}”,之间用“=”连接一条语句
fun onLineMthod(number:Int):Int = if(num %2 == 0) "偶数" else "奇数" //可以省略返回类型 fun onLineMthod(number:Int) = if(num %2 == 0) "偶数" else "奇数"
5. 面向对象
- 创建与声明
//创建类
class CreateObject{
}
//声明对象
val createOject:CreateObejct = CreateObject()
-
继承 关键字(:)
- 主构造函数与次构造函数
//默认类是不可被继承的,用open修饰才可被继承 open class Person(val name:String, val age:Int){ //在类名直接跟上声明的变量即主构造函数 //用constructor声明的即为此构造函数,它必须直接或间接的调用主构造函数 //由于kotlin有默认参数的机制,因此次构造函数很少使用 constructor():this("张三",12){ } } //在继承父类时,必须指定父类的构造函数 class Student:Person("张三",32){ }
-
接口
-
函数修饰符 public(default)、private、protected和internal
- 与java相似,加入了默认函数,java中也有
interface Api{
fun loadData():List<String>
//默认函数
fun loadNoData(){
}
}
//实现
class ApiImpl : Api{
@override
fun loadData():List<String>{}
}
- 数据类
data class DataObject(val name:String, val age:Int){
}
- 单例类
object instance{
}
6. Lambda表达式
- Lamda表达式在做形参时表示该语句块接收怎样的形参和返回怎样的参数
lambda:(String) -> Boolean
-
Lambda表达式作为实参时实现输入参数和返回参数的具体实现,多行是可以换行或者“;”隔开
{item:String -> item.endWith("e");true false}
fun filter(items:List<String>, filterMothod:(String)->Boolean):List<String>{ val result:MutableList<String> = muTableListOf<String>() for (item in items){ if(filterMothed(item)){ result.add(item) } } return result; } fun main(){ val list = listOf("111", "111111", "22222222222") println(filter(list){item:String -> item.length > 5}) }
-
集合(数据结构)
- list
// 初始化 // 使用listOf创建无法操作集合中的元素 val items = listOf("项目1", "项目2", "项目3") for (item in items){ println(item) } // 使用mutableListOf创建可以操作 val items = mutableListOf("项目1", "项目2", "项目3") items.add("项目4")
- set
//同上也有 setOf()/mutableSetof()
- map
//同上也有 mapOf()/mutableMapof() //添加元素 map[key] = value //遍历Map for((key, value) in map){ println("($key, $value)") }
- list
7. 对象空指针的访问限制
- kotlin中默认无法调用方法时传入参数为unll,进而避免空指针的问题
- 但在实际业务中,无法避免空对象的出现,这是可以在形参后添加“?”表示该参数可为null
- 2.中的方式还是为参数空对象进入函数,因此在访问对象时可以使用"?.",相当于使用前会进行判空,空则不访问
- java中assert在kotlin中用“!!”表示
- “?:”
- let()函数为变量设置别名
item.let{
it.hanlde();
}
8. Kotlin小工具
- 字符串拼接
//可以在字符中直接插入对象的属性“${object.attr}”或则值“$varible”
println("直接拼接变量$varible和直接拼接对象的属性${object.attr}");
- 函数的默认参数
- 在类的主构造函数中可以给成员赋值默认的参数,初始化对象时可以不在传入该参数,默认参数最好在最后,如何针对某个变量赋值那么就要表明初始化的变量