Kotlin快速上手笔记(第一行代码-第二章)

本文详细介绍了Kotlin的基本语法,包括变量和函数的声明、逻辑控制结构、循环、面向对象特性以及lambda表达式。此外,还展示了如何处理空指针异常。Kotlin与Java高度兼容,支持函数式编程,是现代Android开发的首选语言。
摘要由CSDN通过智能技术生成

介绍一下基本的Kotlin语法

简介:

  • Kotlin编译后生成JVM可以运行的class文件,因此和Java兼容性高。

变量和函数

  • val:常量。var:变量。
var a : Int = 1
// 函数
// 标准版本
fun method0 (param1: Int, param2: Int): Int {
    return param1 + param2
}
// 只有一行代码,简化1,直接=结果
fun method1 (param1: Int, param2: Int) : Int = param1 + param2
// 只有一行代码,简化2,省略返回类型
fun method2 (param1: Int, param2: Int) = param1 + param2

逻辑控制

// if语句(可以有返回值,类似于 ? : 功能了)
fun method(num1: Int, num2: Int): Int {
    var value = 0
    if (num1 > num2) value = num1
    else value = num2
    return value
}
fun method1(num1: Int, num2: Int): Int {
    val value = if (num1 > num2) num1
    else num2
    return value
}
fun method2(num1: Int, num2: Int) = if (num1 > num2) num1 else num2

// when语句
fun getScore(name: String) = if(name == "Tom") {
    86
} else if(name == "Tommy") {
    66
} else {
    0
}
fun getScore1(name: String) = when(name) {
    "Tom" -> 86
    "Tommy" -> 66 
    else -> 0
}
/*
匹配值-> {执行逻辑}
*/
// Number 是 Int Float等数字相关的类的父类
fun checkNumber(num: Number) {
    when(num) {
        is Int -> { println("number is Int") }
        is Double -> println("number is Double")
        else -> println("number not support")
    }
}
// when也可以不带参数
fun getScored1(name: String) = when {
    name.startsWith("tom") -> 86
    name == "Bob" -> 66
    else -> 0
}

// 循环:while循环一摸一样,for循环较为不同
fun main() {
    val range = 0..10 // 代表从0到10的闭区间,..代表左闭右闭
    val range1 = 0 until 10 // [0, 10) until是左闭右开
    val range2 = 0 until 10 step 2 // 每次跨度2,也就是0,2,4,6,8
    val range3 = 10 downTo 1 // [10, 1]
}

面对对象

// oop
class Person {
    var name = ""
    var age = 0
    fun eat() {
        println(name + "is eating. He is " + age + " years old.")
    }
}

fun main() {
    val p = Person(); // 没有了new关键字
    p.age = 14
    p.name = "mark"
    p.eat()
}

// oop
// 默认所有非抽象类都是final,不能继承的,需要open修饰才能被继承。
open class Person(val name: String) {

}
// 主构造函数没有函数体,直接在类名后面定义
class Student(val sno: String, val grade: Int, /*没有val或者var,作用域仅在主构造函数中*/name: String): Person(name)/*子类必须调用父类构造函数*/ {
    init {
        // 主构造函数中的逻辑可以在这里写
        println("sno is" + sno)
        println("grade is" + grade)
    }
    // 次构造函数1, 调用了主构造函数
    constructor(name: String) : this("", 0, name)
    // 次构造函数2,调用了次构造函数1
    constructor(): this("")
}

// 没有主构造函数,只有次构造函数的情况(继承的父类也不用加()了,因为没有定义主构造函数)
class Student1: Person {
    /*由于没有主构造函数,因此无法用this调用主构造函数,只能用super调用父类的构造函数*/
    constructor(name: String, age:Int):super(name) {
    }
    // 调用上面那个构造函数
    constructor(): this("", 0)
}

// 接口
interface Study {
    fun readBooks()
    fun doHomework()
}
// 继承接口和实现类都统一使用:使用, 分隔
class Student3(name: String, age: Int): Person(name), Study {
    override fun readBooks() {
        TODO("Not yet implemented")
    }
    override fun doHomework() {
        TODO("Not yet implemented")
    }
    // public: 所有类可见    private:仅内部类可见
    // protected: 仅当前类和子类可见     internal:仅当前模块可见
    private fun a() {

    }
}

fun main() {
    val s = Student("20182211", 2, "mark")
}

lambda

空指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值