一:变量和函数
变量:
可变变量:var
不可变变量:val
类推到机制: var num = 10 ,推到 num 为 Int
Kotlin 对象数据类型 (Java 基本数据类型)
注: 除非一个变量明确允许被改变,否则都应该加上fianl 关键字(即 Kotlin val 声明变量)
函数:
fun methodName(param1 : Int , param2 : Int ) : Int {
return 0
}
语法糖:
1.当一个函数中只有一行代码时,kotlin允许我们不必编写函数体,可以直接将唯一的一行代码写在函数定义的尾部,中间用等号连接。
二:程序的逻辑控制
if 条件语句: 可以有返回值
fun largeNumber( num1 : Int , num2 : Int ) : Int {
val value = if (num1 > num2 ){
num1
}else {
num2
}
return value
}
结合语法糖:
fun largeNumber( num1 : Int , num2 : Int ) : Int = if(num1 > num2){
num1
} else {
num2
}
when 条件语句:有点类似与Java 的 switch
精准匹配:
fun getScore(name : String ) = when (name){
"Tom" -> 87
"Jim" -> 79
"Jack" -> 100
"Lily" -> 92
else -> 0
}
类型匹配:is 相当于 java 的 instanceof
fun checkNum(num :Number){
when(num) {
is Int -> println("number is Int")
is Double-> println("number is Double")
else -> println("number not support")
}
}
when 语句不带参数的用法:
fun getScore( name : String ) = when{
name.startWith("Tom") -> 88
"Jim" -> 79
"Jack" -> 100
"Lily" -> 92
else -> 0
}
循环语句:
两端闭区间:“ … ”
fun main (){
for ( i in 0 … 10 ){
println(i)
}
}
左闭右开:until
step: 条件递增
downTo : 降序
三.面向对象编程:
类与对象
class Person (){
var name = ""
var age = 0
fun eat(){
}
}
实例化: val person = Person() (没有 java 的关键字 "new " )
fun main(){
val p = Person()
p.name = "Jim"
p.age = 20
p.eat()
}
继承和构造函数:如果一个类不是专门为继承而设计的,那么就应该主动加上final 声明,禁止被继承。
open(关键字):说明类可以被继承
主构造函数,次构造函数:
继承不加 “()”的情况:
接口:“ :” 表示继承和接口(java 继承是 extends , 接口是 implements)
interface Study {
fun readBooks()
fun doHomework()
}
class Student(name : String , age : Int ) : Person(name, age) , Study {
}
函数的可见性修饰符:internal (同一模块中的类可见)
数据类与单例类:
data (关键字):数据类(model), 重写了equals(), hashCode() , toString()
object(单例类):
四.Lambda编程:
集合:
集合的函数式api: maxBy, filter, map
java 函数式api:
如果一个Java方法的参数列表中,有且仅有一个,Java单抽象方法接口参数,可以将接口名省略
五. 空指针检查:
? (如果不为null ,才执行)
?:(左边表达式不为null, 就返回左边表达式结果)
!!(一定不为null,否则报 空指针异常 )