一、变量
1.val 不可变得变量
val a : Int = 10
2.var 可变的变量
var a : Int = 10
二、函数
定义函数关键字 fun
fun getName (param1 : Int, param2 : Int) : Int {
}
fun getName (param1 : Int, param2 : Int) = max(param1, param2)
三、程序的逻辑控制
1.if (同java,但是有返回值)
val a = if (a > b) {
a
} else {
b
}
2.when (类似java中的switch, 有返回值)
when(name) {
"小明" -> 20
"小红" -> 21
else -> 0
}
is相当于java的instanceof
when(name) {
is Int -> 20
is Double -> 20.0
else -> 0
}
3.for
val range = 0..10 //(闭区间[0,10])
val range = 0 until 10 //[0,10)
val range = 10 downTo 0 //(降序区间)
for(i in range step 2) //(step2 相当于Java中 i = i + 2)
四、面向对象编程
1.类与对象
class Person{
var name = ""
var age = 0
fun eat() {
}
}
//实例化
val per = Person();
2.继承
默认class都 不可以继承,使用open关键字
open class Person{
var name = ""
var age = 0;
fun eat() {
}
}
class Student : Person() {
var sno = " "
var grade = 0
}
3.构造函数
class Student(val sno : String, val grade : Int) : Person() {
init {
//构造函数方法体
}
}
4.次构造函数(constructor关键字定义)
class Student(val sno : String, val grade : Int) : Person() {
constructor(val sno : String) : this(" ", 0){
}
constructor() : this(" ") {
}
}
没有主构造函数时,次构造函数可使用super调用父类的主构造函数
5.接口
interface Stydy{
fun readBooks()
fun doHomeWork()
}
class Student(val sno : String, val grade : Int) : Person() , Study{
override fun readBooks() {
//XXX
}
override fun doHomeWork() {
//XXX
}
}
6.修饰符
public 默认
protected 当前类子类可见
internal 同一模块中的类可见
7.数据类 (data关键字)
data class Student(val sno : String, val grade : Int) {
}
8.单例类 (object关键字)
object Student {
}
9.静态方法
class Util {
companion object{
@JvmStatic //单例类或companion object中的方法
fun doHomeWork() {
}
}
}
五、集合
1.list
val list = listOf("a", "b","c") //(不可变集合)
val list = mutableListOf("a", "b","c") //(可变集合)
2.set
val set = setOf("a", "b","c") //(不可变集合)
val set = mutableSetOf("a", "b","c") //(可变集合)
3.map (不建议put()、get())
val map = HashMap<String, Int>()
map["小明"] = 21
map["小红"] = 20
val age = map["小明"]
val map = mapOf("小明" to 21, "小红" to 20) //(不可变集合)
val map = mutableMapOf("小明" to 21, "小红" to 20) //(可变集合)
六、Lambda表达式
{参数名1:参数类型,参数名2:参数类型 -> 函数体}
当参数列表只有一个函数,可不用声明使用 it 关键字代替
七、函数式API
1.map (把集合中的每个元素都映射成另外的值)
val newList = list.map{it.toUpperCase()}
2.filter (过滤集合中的数据)
val newList = list.fifter{it.length >= 5}.map{it.toUpperCase()}
3.any (判断集合中是否存在符合条件的元素)
val anyResult= list.any{it.length >= 5}
4.all (判断集合中全部元素是否符合条件)
val allResult= list.any{it.length >= 5}
八、空指针检查
1. ?. (当对象不为空调用该方法,为空什么都不做)
study?.readBooks()
2.?: (这个操作符左右两边都接收一个表达式,如果左边表达式不为空返回左边表达式,否则返回右边的表达式)
val c = a ?: b
3.!! (强行通过编译 ,如果为空抛出空指针异常)
study!!.readBooks()
九、字符串内嵌表达式
${}
$ //(只有一个变量可以省略大括号)
十、函数参数的默认值
fun readBooks(name : String, time Int = 60) {
}
readBooks("小明")
readBooks(name = "小明")
次功能可替换次构造函数
十一、标准函数
1.let
obj.let{ obj2 ->
}
study?.let { it ->
it.readBooks()
}
2.with
val result = with(obj) {
//这里是obj的上下文
"value" //with函数的返回值
}
3.run (只接收一个Lambda参数)
val result = obj.run {
//这里是obj的上下文
"value" //with函数的返回值
}
4.apply () (只接收一个Lambda参数,无法指定返回值)
val result = obj.apply {
//这里是obj的上下文
}
//result == obj