Kotlin学习

一、学习资源

Kotlin在线运行网站

        参考:Kotlin Playground: Edit, Run, Share Kotlin Code Online

Kotlin教程

        菜鸟教程:Kotlin 教程 | 菜鸟教程

        kotlin资源大全:Kotlin 资源大全 - 如何学习 Kotlin? - 知乎

 二、主要内容

        本文主要介绍Kotlin和Java在语法上的区别之处,类似的地方不做介绍,需要详细了解请参考"学习资源 -> 菜鸟教程"。

2.1 变量

        var定义变量、val定义常量,在Kotlin中不声明类型,默认为不可变的变量

2.2 逻辑控制  

2.2.1 if语句

        1. if语句有返回值,可用于简化代码;

        使用实例

        (1)获取两个数中的最大值,使用了语法糖(即编程语言中更简洁的表达语法)

fun largeNumber =(num1: Int, num2: Int) = if (num1 > num2) {
    num1
} else {
    num2
}

        (2)通过if判断找出对应学生的分数

//通过if判断找出对应学生的分数
fun getScore(name: String) = if (name == "Tom") {
    86
} else if (name == "Jim") {
    77
} else if (name == "Jack") {
    95
} else if (name == "Lily") {
    100
} else {
    0
}

2.2.2 when语句

        有点类似于Java中的switch语句;

        when语句也有返回值;

        when的结构:匹配值 -> { 执行逻辑 }

        使用实例

        (1)通过when语句找出对应学生的分数,可以简化if-else语句;

fun getScore(name: String) = when (name) {//精确匹配
    "Tom" -> 86
    "Jim" -> 77
    "Jack" -> 95
    "Lily" -> 100
    else -> 0
}

        (2)when支持类型匹配;

fun checkNumber(num: Number) {
    when (num) {
        is Int -> println("number is Int")
        is Double -> println("number is Double")
        else -> println("number not support")
    }
}

        (3)until和..关键字,step关键词,downTo关键字

//依次输出:0 1 2 3 4 5 6 7 8 9 10(以换行符分隔)
fun test1() {
    for(i in 0..10) {// "0..10"是双端闭区间
        println(i)
}

//依次输出:0 2 4 6 8(以换行符分隔)
fun test2() {
    for (i in 0 until 10 step 2) {"0 until 10"是左闭右开区间
        println(i)
    }
}

//依次输出:10 9 8 7 6 5 4 3 2 1(以换行符分隔)
fun test3() {
    for (i in 10 downTo 1) {"10 downTo 1"是双端闭区间
        println(i)
    }
}

2.3 面向对象编程

2.3.1 对象的创建

        val p = Person()        //区别于Java的是,对类进行实例化时,不需要使用new关键字

2.3.2 类的继承

        默认情况下,类是不可以被继承的,类似于变量默认为常量(不可被改变)。

        当然,抽象类默认是可以被继承的,因为抽象类本身无法创建实例,一定要子类去继承它。

        在class前面加open关键词可以声明该类可以被继承

        让Student类继承Person类:class Student : Person() {}

        继承时为什么要加()括号呢?这就涉及到主构造函数和次构造函数

        主构造函数和次构造函数

        主构造函数将是你最常用的构造函数,主构造函数没有函数体,所有主构造函数中的逻辑放在init结构体中,如下代码:

class Student(val sno: String, val grade: Int) : Person() {
    init {
        println("sno is " + sno)    //学号
        println("grade is " + grade)    //成绩
    }
}

        继承

        如上代码中,":"后面写的是"Person()",表示继承的是Person类的无参构造函数,若Person定义时没写无参构造函数,则这里会报错;

        那Student要是没有Person的name和age属性怎么办?又不能用无参构造函数,就只能采用如下方法:

class Student(val sno: String, val grade: Int, name: String, age: Int) : Person(name, age) {
    ...
}

        (1)子类继承父类的方法或变量时,需要在fun关键字前面添加override关键字;

2.4 kotlin接口

        (1)使用interface关键字定义接口,且允许方法有默认实现

2.5 kotlin扩展

        (1)认真理解:kotlin扩展声明为成员的运行原理; 

2.6 kotlin数据类与密封类

        (1)认真理解:密封类

2.7 kotlin泛型

        (1)定义泛型类时,类型参数写于类名后;定义泛型函数时,类型参数写于函数前;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值