if else
条件:if和else中的条件必须是true或者false的表达式
表达式:分支的最后一行才是计算的结果
val age = 15
var result : String? = null
result = if (age >= 18){
"已成年"
"已满18"
}else{
"未成年"
"未满18"
}//结果是:未满18
可选值
可选值是什么:可能有值,也有可能没值
可选值的符号分别是 ?和!!
?
什么时候用:kotlin中必须给变量一个初值,但又不知道现在的具体值,就可以给一个null值。
var name:String ? = null
特点:在变量声明中使用?
功能:当这个变量有值,那么就访问这个变量的对应的方法,如果没有值(null)就不会访问这个变量,也不会报错。
var name:String ? = null
//第一种表达方式
if (name != null) {
println("name has ${name.length}char")
}
//第二种表达方式
println("name has ${name?.length}char")
//第二种相较于第一种更加简便,kotlin中追求的就是简便
val a = arrayOfNulls<String>(4)
println("frist is ${a[0]?.length}")
!!
什么时候用:如果在使用可选类型的变量时,能够确定这个变量有值,才使用!!
var name1: String ? = null
name1 = "cr"
println("name has ${name!!.length}")
when
和switch的联系:when和c语言中的switch差不多,但区别是switch中的条件必须是int型,而when中的条件可以是任意类型
val salary = 8000
val income = 0
var tax = 0
when(salary){
in 1..500 -> {tax = 0}
in 5001..10000 -> tax = (salary * 0.1).toInt()
else -> tax = (salary * 0.2).toInt()
}
这段与上面不同的是tax=可以提出来,但如果不同条件的改变的量不同那么就不能将tax = 提取出来
val salary = 8000
val income = 0
var tax = 0
tax = when(salary){
in 1..500 -> { 0 }
in 5001..10000 -> (salary * 0.1).toInt()
else -> (salary * 0.2).toInt()
}
函数
函数就是一个代码块
功能:用于封装一个具体功能
return的意义:从函数中跳出来
与C语言的区别:
- C语言要先声明函数(也就是说要想使用函数必须要先在开头声明函数名,而kotlin不需要
- 同一文件中的函数可以相互调用,不需要导入头文件,而C语言中需要导入头文件
分类:
fun main() {
打印()
text1(12)
text1(10,"cr")
val result = add(9,1)
val result2 = minus(p2 = 2)
}
//无参数 无返回值
fun 打印(){
println("没有参数 没有返回值")
}
//有1个参数或多个 无返回值
fun text1(age:Int):Unit{
println("my age is $age")
}
//当函数的语句只有一句话,可以简化为一下表达式
fun text2(age:Int) = age
fun text1(age:Int,name:String){
println("$name is $age years old")
}
//多个参数 有返回值
fun add(p1:Int,p2:Int):Int{
return p1 + p2
}
//自己提供默认参数
fun minus(p1:Int = 0,p2:Int): Int {
return p1 - p2;
}
如果要在多层循环中想要跳出循环,可以添加标签
格式:名称@
使用时:@名称
跳出@ for (i in 1..3){
for (j in 2..10){
if (i == 2 && j == 5){
break@跳出
}
}
}
类和对象
封装:将属性和行为(方法和功能)封装成一个完整体,并提供给外部交互的接口 (属性和方法)
类:抽象概念,对一类事物的高度抽象并具有共同的属性 eg:人
类的名称首字符大写
尽量一个文件中编写一个类,文件名称和类名保持一致
对象:具体的实际存在的物体 eg:小明
类和对象的加载流程
- 定义一个类时,是不分配内存的
- 使用这个类时,会将这个类加载到内存里面,名称是类对象
- 创建这个类的一个对象,使用一个类对象来创建一个对象并为这个对象分配内存空间
- 当不用这个对象时,就会销毁对象(收回这个对象拥有的资源然后回收内存)
构造函数(一种函数)
- 通过构造函数来创建对象,不显示声明,使用默认构造函数constructor()
- 格式:类名 + constructor()
- 功能:在创建一个对象的同时,赋给对象一些属性。因为有些对象的属性必须在创建对象同时拥有,不然后续使用会报错。在构造函数创建的同时就赋予属性
- 次构造函数:除了主构造函数的都是次构造函数
- 构造顺序:如果调用主构造函数就直接调用,如果使用次构造函数,而且主构造函数有参数,次构造函数必须先调用主构造函数