val(value的简写)用来声明一个不可变的变量。(只读变量)
var(variable的简写)用来声明一个可变的变量。(可读写变量)
在变量声明中指定数据类型时,应在冒号后面添加一个空格。
先声明变量在声明变量的类型。 val a :Int = 10
kotlin拥有类型推导机制,变量类型可以省略不写 (val a =10),如果对变量延迟赋值,就无法自动推导类型,需要显式地声明变量。
kotlin全部使用对象数据类型,完全抛弃了java的基本数据类型,例如在java中int是关键字,在kotlin中Int是一个类。
kotlin每个语句都应单独占一行。结尾不用加分号;
if语句可以有返回值,返回值是if语句每一个条件中最后一行代码的返回值
val isSuccessful = true
val responseResult = if (isSuccessful) "登录成功"else "登录失败!"when表达式
fun getScore(name: String) = when(name) {"Tom" -> 86"Jerry" -> 7else -> 0
}
when语句允许类型匹配
fun checkNumber(num: Number){when(num){is Int -> println("num is Int")is Double -> println("num is Double")else -> println("num not support")}
}
when语句可以不传参数 kotlin判断字符串或对象是否相等可以直接使用 == 关键字
fun getScore(name: String) = when {name.startWith("N") -> 100name == "Tom" -> 86name == "Jerry" -> 7else -> 0
}
..是创建两端闭区间的关键字 val range = 0 .. 10 表示[0,10],
fun main(){for(i in 0 .. 10){println(i)}
}until关键字可以创建左闭右开的区间,step关键字改变循环的变化量。
fun main(){for(i in 0 until 10 step 2){println(i)}
}
// 0 2 4 6 8降序区间使用downTo关键字
fun main(){for(i in 10 downTo 1){println(i)}
}
kotlin实例化不需要new 关键字 val p = Person()
kotlin中任何一个非抽象类默认不可被继承,在类前加open关键字可以被继承
open class Person(){ ... }
kotlin继承、实现统一使用冒号 interface Study{ ... }
class Student : Person(),Study{ ... }
kotlin中public修饰符是默认项,protected在kotlin中表示只对当前类和子类可见,kotlin抛弃java中的default使用internal修饰符,表示只对同一模块中的类可见。
kotlin中数据类中只需要使用data关键字即可,toString()等固定方法自动生成
data class Cellphone(val brand: String,val price: Double)
kotlin中将class关键字改为object关键字即可创建一个单例类,不需要私有化构造函数,可以直接在类中编写需要的函数。
object Singleton{fun singletonTest(){...}
}
//不可变集合
val list = listOf("Apple","Pear","Grape")
//可变集合
val list = mutableListOf("Apple","Pear")
list.add("Grape")Set集合和List集合用法一致,创建方式替换为setOf()和mutableSetOf()val map = HashMap<String,Int>()
map["Apple"] = 1 //添加
map["Banana"] = 2
val number = map["Apple"] //读取
//也可以使用mapOf()和mutableMapOf()直接传入
val map = mapOf("Apple" to 1,"Banana" to 2)
// val d2 : Double = null //非可空类型,不能赋值为null,编译不通过
val d3 : Double? = null //可空类型,能赋值为null,编译通过//可空类型 > 非可空类型
//为空类型:1.可以存null值。2.可以存正常值。
//非可空类型:1.只能存正常值。
var d4 : Double = 6588776.7
var d5 : Double? = nu11
// d4 = d5//编译不通过,非可空类型 不能 接收 可空类型
// d5 = d4//编译通过 可空类型 可以 接收 非可空类型
// d4 = d5 编译不通过的解决方案
if (d5 != nu11) d4 = d5//kotlin推荐显式转换
val intValue = 666
val longValue : Long = intValue .toLong()
?. 操作符表示 对象不为空时正常调用,对象为空时什么都不做
a?.doSomething()
?: 操作符左右两边接收一个表达式,如果左边结果不为空则返回左边的结果,否则返回右边的结果
val c = a ?: b
kotlin支持字符串内嵌表达式
"hello, ${obj.name}.nice to meet you!"
//仅有一个变量时可以将大括号省略
"hello, $name.nice to meet you!"
给函数设定参数默认值
fun printParams(num: Int = 100,str: String){println("num is $num, str is $str")
}fun main(){printParams(str = "world" ,num = 123) //可以通过键值对传参
}