Unit2 Kotlin Learning
Unit2 Kotlin Learning
2.1 变量与函数
2.1.1 变量
1、Kotilin定义一个变量,只允许在变量前声明两个关键字:val 和var
val(value的缩写):用来声明一个不可变的变量
var(variable的简写):用来声明一个可变的变量
fun main(){
val a = 10
println("a = " + a)
}
P.S. Kotlin每一行代码结尾不用加分号
2、Kotlin具有类型推导机制,但有时无法正常工作,故我们有时我们需要声明变量类型。
val a: Int = 10
Java中的基本数据类型对应Kotlin中的对象数据类型,即Java中int是关键字,而Kotlin中Int变成了一个类。
养成使用val声明变量的习惯。
2.1.2 函数
函数和方法没什么区别,Java 中方法叫法普遍一些,Kotlin 中函数叫法更普遍一些。
fun main(){
val a = 10
val b = 20
val c = largenumber(a, b)
println("c = " + c)
}
fun largenumber(num1: Int,num2: Int): Int{
return max(num1, num2)
}
// fun largenumberc(num1: Int,num2: Int):Int = max(num1, num2)
// fun largenumberc(num1: Int,num2: Int) = max(num1, num2)
fun(function的缩写)是定义函数的关键字。
参数声明格式是“参数名:参数类型”。
参数括号后面的部分可选,可用来声明返回的数据类型。
P.S.上述代码注释中的两句定义函数是Kotlin的一种语法糖,主要用于只有一行代码的时候的简化。
2.2 程序的逻辑控制
2.2.1 条件语句
1、if 条件语句
fun biggerValue(num1: Int, num2: Int) = if (num1 > num2) num1 else num2
2、when 条件语句
fun getScore(name: String) = when {
name.startsWith("Tom") -> 86
name == "Jim" -> 77
name == "Jack" -> 95
name == "Lily" -> 100
else -> 0
}
fun checkNumber(num: Number) {
when (num) {
is Int -> println("number is Int")
is Double -> println("number is Double")
else -> println("number not support")
}
}
其中上述代码中的 Number 是 Kotlin 内置的一个抽象类,像 Int、Long、Float、Double 等与数字相关的类都是它的子类。
2.2.2 循环语句
1、while循环类比Java
2、for-in循环:
for(i in 0..10){
println(i)
}
for(i in 0 until 10 step 2){
println(i)
}
for(i in 10 downTo 1){
println(i)
}
..构成左右闭区间,until构成左闭右开区间,downTo反向构成区间,step更改递增数字
2.3 面向对象编程
2.3.1 类与对象
class Person {
var name = ""
var age = 0
fun eat(){
println(name + " is eating.He is " + age + " years old.")
}
}
fun main(){
val p = Person()
p.name = "Jack"
p.age = 19
p.eat()
}
类是对事物的一种封装,比如人、汽车等。
字段表示该类所含有的属性,如人的姓名和年龄。
函数则表示该类可以有哪些行为,如人吃饭。
面向对象最基本的用法,先将事物封装成具体的类,然后将事物所拥有的属性和能力分别定义为类中的字段和函数,接下来对类进行实例化,再根据具体的变成需求调用类中的字段和函数即可。
2.3.2 继承与构造函数
Kotlin中一个类默认是不可以被继承的,如果想要让一个类可以被继承,需要主动声明open关键字:
open class Person {
…
}
要让另一个类去继承Person类,则需要使用冒号关键字:
class Student : Person() {
var sno = ""
var grade = 0
}
2.5.3 接口
Kotlin中定义接口的关键字和Java中是相同的,都是使用的interface:
interface Study {
fun readBooks()
fun doHomework()
}
而Kotlin中实现接口的关键字变量了冒号,和继承使用的是同样的关键字:
class Student(val name: String, val age: Int) : Study {
override fun readBooks() {
println(name + " is reading.")
}
override fun doHomework() {
println(name + " is doing homework.")
}
}
调用这两个接口的函数:
fun main(){
val student = Student("Jack", 19)
doStudy(student)
}
fun doStudy(study: Study){
study.readBooks()
study.doHomework()
}
综上,可布置出完整代码
package com.example.helloworld
interface Study {
fun readBooks()
fun doHomework()
}
class Student(val name: String, val age: Int) : Study {
override fun readBooks() {
println(name + " is reading.")
}
override fun doHomework() {
println(name + " is doing homework.")
}
}
class Mader(val name: String, val age: Int) : Study {
override fun readBooks() {
println(name + " is doing.")
}
override fun doHomework() {
println(name + " is doing vedio.")
}
}
fun main(){
val student = Mader("Jack", 19)
doStudy(student)
}
fun doStudy(study: Study){
study.readBooks()
study.doHomework()
}
2.5.4 数据类与单例类
Kotlin中使用data关键字可以定义一个数据类:
data class Cellphone(val brand: String, val price: Double)
Kotlin会根据数据类的主构造函数中的参数将equals()、hashCode()、toString()等固定且无实际逻辑意义的方法自动生成,从而大大简少了开发的工作量。
P.S.
1、equals() 方法用于将字符串与指定的对象比较。
String 类中重写了 equals() 方法用于比较两个字符串的内容是否相等。
retVal = Str1.equals( Str2 ); // 比较字符串 str1 和 str2 是否相等,retval 返回的是布尔值。
2、hashCode() 方法用于返回字符串的哈希码。
public int hashCode()
3、toString() 方法可把一个 Number 对象转换为一个字符串,并返回结果。
NumberObject.toString(radix)