一.定义变量
1.val定义:只能赋值一次
val a: Int = 1;//定义整数变量
val a = 1;自动推断出 `Int` 类型
val c: Int // 如果没有初始值类型不能省略
2.var定义:可重新赋值
var x = 5;
x+=1;
二.表达式
1.if表达式与java一样这里不说了
2.for、while循环:
val items = listOf("apple", "banana", "kiwifruit")
for (item in items) {
println(item)
}
或者:
for (index in items.indices) {
println("item at $index is ${items[index]}")
}
3.when:
相当于java的switch,但是功能更强大:
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
3,4 -> print("x == 3 or x == 4”)//相同处理放在一起用逗号隔开
in 1..10 -> print("x is in the range”)//1到10范围内的
!in 10..20 -> print("x is outside the range”)//不在区间内的
is String -> x.startsWith("prefix”)//检测是否为字符串
else -> { // 注意这个块
print("x is neither 1 nor 2")
}
}
三.函数:
fun sum(a: Int, b: Int): Int {
return a + b
}
解释:
fun:kotlin函数使用fun关键字声明
sun:为函数名
a:为参数
a:Int:表示int类型的参数
Int:表示返回类型
返回无意义的值,有两种写法:
1.fun printSum(a: Int, b: Int): Unit {
println("sum of $a and $b is ${a + b}")
}
2.省略Unit:
fun printSum(a: Int, b: Int) {
println("sum of $a and $b is ${a + b}")
}
单表达式函数:
当函数返回单个表达式时,可以省略花括号并且在 = 符号之后指定代码体即可:
fun double(x: Int): Int = x * 2
相当于:
fun double(x:Int): Int{
return x*2
}
在 Kotlin 中函数可以在文件顶层声明,这意味着你不需要像一些语言如 Java、C# 或 Scala 那样需要创建一个类来保存一个函数。此外除了顶层函数,Kotlin 中函数也可以声明在局部作用域、作为成员函数以及扩展函数。
函数类型:
1.局部函数(即一个函数在另一个函数内部):局部函数可以访问外部函数(即闭包)的局部变量
2.成员函数是在类或对象内部定义的函数:成员函数以点表示法调用:Sample().foo()
四.创建类和实例
val rectangle = Rectangle(5.0, 2.0) // 不需要“new”关键字
五.为null判断
1.不为null
val files = File("Test").listFiles()
println(files?.size)//files不为null时获取它的size
2.不为null else
val files = File("Test").listFiles()
println(files?.size ?: "empty”)//if不为null打印files的size 否则打印empty
3.不为空执行
val value = ...
value ?.let{
//不为空时执行
}
六.with
定义:将对象作为函数的参数,在函数内可以通过 this指代该对象。返回值为函数的最后一行或return表达式。
例如:
var paint = Paint()
paint.color = Color.BLACK
paint.strokeWidth = 1.0f
使用with:
var paint = Paint()
with(paint){
color = Color.BLACK
strokeWidth = 1.0f
}
var list= mutableListOf
list.add(“1")
list.add(“2")
使用with:
var list = with(mutableListOf
add(“1")
add(“2")
this
}
七.空安全
在 Kotlin 中,类型系统区分一个引用可以容纳 null (可空引用)还是不能容纳(非空引用)。 例如,String 类型的常规变量不能容纳 null:
1.var a: String = "abc"
a = null // 编译错误
调用:
val l = a.length 就不可能会出现空指针报错
2.如果要允许为空,我们可以声明一个变量为可空字符串,写作 String?
:
var b: String? = "abc"
b = null // ok
print(b)
调用:
val l = b.length // 错误:变量“b”可能为空,调用时编译器会报错
如果一定要调用需要做判断,调用方式:
1.val l = if(b != null) b.length else -1
2.b?.length//b不等于null时执行b.length