编程语言基本上共有的特性就是变量和函数
1.1 变量
Kotlin中定义一个变量,只允许在变量前声明两种关键字:val和var
val(value的简写)声明一个不可变变量,初始赋值后不能重新赋值,对应java中的final变量
var(variable的简写)声明一个可变变量,初始赋值后可以重新赋值,,对应java中的非final变量
注意:Kotlin每一行代码的结尾是不用加分号的
Kotlin完全抛弃了Java中的基本数据类型,全部使用了对象数据类型。在Java中int是整型变量的关键字,而在Kotlin中Int变成了一个类,它拥有自己的方法和继承结构。
语法所示: val b:Int=100
什么时候用这两个变量呢,永远优先使用val来声明一个变量,当val无法满足需求时再使用var.这样设计出来的程序会更加健壮,也更加符合高质量的编码规范。
1.2 函数
定义一个函数的语法规则如下 :
fun name(num1: Int, num2: Int): Int {
return max(num1, num2)
}
fun(function的简写)是定义函数的关键字,无论你定义什么函数,都一定要使用fun来声明
fun后面的是函数名(name)
函数名后面的一对括号中,可以声明该函数接收什么参数
括号后面的部分是可选的,用于声明该函数会返回什么类型的数据。如果不需要返回任何数据,这部分可以不写
两个大括号之间的内容就是函数体了,可以在这里编写函数的具体逻辑。
当一个函数的函数体中只有一行代码时,可以使用单行代码函数的语法糖:和上面的效果一样
fun name(num1:Int,num2: Int)= max(num1,num2)
使用这种写法,可以直接将唯一的一行代码写在函数定义的尾部,中间用等号连接即可
举例,通过if取最大值:
fun name(num1:Int,num2: Int):Int{
var value=0
if (num1>num2){
value=num1
}else{
value=num2
}
return value
}
看起来代码有点多,之前学了Kotlin的语法糖,那么简化下吧:
fun name(num1:Int,num2: Int)= if (num1>num2) num1 else num2
是不是很惊讶,一行搞定,所以语法糖很重要
Kotlin中的when有点类似于java中的switch,但是比switch强大的多,而且有时候比if语句还要简单好用。举例,查询学生考试成绩:
用if写:
如果判断条件非常多,是不是感觉代码很冗(rong,三声)余,这个时候可以用when:
when格式:匹配值 -> {执行逻辑} 一行代码的时候,{}可以省去
是不是感觉代码瞬间少了很多,看起来更高大尚简洁了。
when语句允许进行类型匹配,如下:
is 关键字就是类型匹配的核心,相当于java中的instanceof关键字。
如果要查询以A开头的成绩,可以通过以下来查:
Kotlin中循环用 for-in,首先说下区间,例:
val range=0..10 .. 是创建两端闭区间的关键字,在 .. 的两边指定区间的左右端点就可以创建一个区间了:
在很多情况下,双端闭区间不如单区间好用,例如,数组的下标都是从0开始的,一个长度为10的数组,下标区间范围是0到9,所以用左闭右开更加常用,Kotlin用可以使用 until 关键字来创建,例:
val range= 0 until 10
每次执行循环递增加1,如果想跳过其中的一些元素,可以使用 step 关键字,例:
表示每次执行循环加2
注意 ..和until关键字都要求左端必须小于等于右端,是一个升序的区间,如果要降序可以使用 downTo 关键字,例
有很多人简历上第一条写着 熟练Java面向对象编程思想,但是让你一说的时候就说的东一句西一句了,这里借用郭霖大神的话。
不同于面向过程的语言(比如C语言),面向对象的语言是可以创建类的。类就是对事物的一种封装,比如说人、汽车、房子、书屋等任何事物,我们都可以将它封装一个类, 类名通常是名词。而类中又可以拥有自己的字段和函数,字段表示该类所拥有的属性,比如说人可以有姓名和年龄,汽车可以有品牌和价格,这些就属于类中的字段,字段名通常也是名词。而函数则表示该类可以有哪些行为,比如说人可以吃饭和睡觉,汽车可以驾驶和保养等,函数名通常是动词。
通过这种类的封装,我们就可以在适当的时候创建该类的对象,然后调用对象中的字段和函数来满足实际编程的需求,这就是面向对象编程最基本的思想。当然,面向对象编程还有很多其他特性,如继承、多态等,但是这些特性都是建立在基本的思想之上的,理解了基本思想之后,其他的特性我们可以在后面慢慢学习。
现在我们开始学习面向对象编程中另一个极其重要的特性一 继承。 继承也是基于现实场景总结出来的一个概念,其实非常好理解。比如现在我们要定义一个Student类,每个学生都有自己的学号和年级,因此我们可以在Student类中加人sno和grade字段。但同时学生也是人呀,学生也会有姓名和年龄,也需要吃饭,如果我们在Student类中重复定义name、age字段和eat()函数的话就显得太过冗余了。这个时候就可以让Student类去继承Person类,这样Student就自动拥有了Person中的字段和函数,另外还可以定义自己独有的字段和函数。这就是面向对象编程中继承的思想。
在Kotlin中,让一个类可以被继承,在类的前面加上 open 关键字就可以了,例:
要让另一个类继承这个Person类,在java中继承用extends,Kotlin中则变成了一个冒号,例:
为什么Person类的后面要加一个括号,java中继承的时候不需要啊,这个就涉及到主构造函数、次构造函数了。
Kotlin将构造函数分为主构造函数、次构造函数。
主构造函数的特点是没有函数体,直接定义在类名的后面即可,例:
次构造函数基本上是用不到的,Kotlin提供了一个给函数设定参数默认值的功能,基本上可以替代构造函数的作用。