美文网首页
kotlin - 学习笔记

kotlin - 学习笔记

作者: 自走炮 | 来源:发表于2020-08-06 04:16 被阅读0次
    • 变量 条件 循环 异常 null 空安全
    • 类 接口 类扩展方法 with

    变量 条件 循环 异常 null 空安全

    fun main (args: Array<String>) {
        var name: String // 变量
        val age: Int = 10 // 常量
    
        var APILevel = 26 // 推测变量类型
        var isSupport = if (APILevel >= 16) true else false // if 赋值
        // 判断类型
        if (APILevel is Int) println('APILevel是整形')
        else println(APILevel.javaClass.toString())
    
        // when 判断,相当于 switch,可赋值
        var content = when (APILevel) {
            26, 27 -> 'Android Oreo'
            else   -> '其他Android'
        }
        // when is 判断
        when (APILevel) {
            is Int -> println('APILevel是整数类型')
            else   -> println('未知类型')
        }
    
        // for 循环
        var names = arrayOf('p1', 'p2', 'p3') // 数组定义
        for (name in names) println('${name}')
        for (i in names.indices) println('${i}.${names[i]}')
        for ((index, name) in names.withIndex()) println('${index}.${name}')
        for (i in 1..5) print('${i},') // 1,2,3,4,5,从1到5(包括5)
        for (i in 1 until 5) print('${i},') // 1,2,3,4,从1到5(不包括5)
        for (i in 2..10 step 2) print('${i},') // 2,4,6,8,10
        for (i in 10 downTo 6) print('${i},') // 10,9,8,7,6
    
        var num = 5
        if (num in 1..10) println('${num}在1到10之间')
    
        val value = '10'
        var out: Int? = null // 一般实例不允许 null(编译时报错),? 为允许 null 赋值
        value = out!!.length // !! 为跳过编译时 null 检测,运行时报错
    
        // 异常
        try {
            var out = Integer.parseInt(value)
        } catch (e: Exception) {
            println(e.message)
        } finally {
            println('out is ${out}')
        }
    
        // 赋值异常
        var output = try {
            Integer.parseInt(value)
        } catch (e: Exception) {
            -1
        }
    }
    

    类 接口 类扩展方法 with

    class Player (val name: String) {} // 可在类定义中写构造器,相当于 constructor (name: String) { this.name = name }
    
    // open 为可继承类
    open class Car (brand: String) {
        var brand: String = brand
        fun showBrand () { println('brand is ${brand}') }
    }
    // 继承类
    class Lexus : Car('Lexus') {}
    
    // 接口
    interface IDatabase {
        fun connect (connString1: String)
        fun close ()
    }
    // 抽象类可不实现接口的所有方法,可被继承
    abstract class Database (databaseName: String) : IDatabase {
        val databaseName: String = databaseName
        var connString2: String = ''
        fun showInfo () { println('数据库: ${databaseName}') }
    }
    // 基础类需实现接口的所有方法,继承抽象类和接口
    class Oracle (connString2: String) : Database('Oracle') {
        init { super.connString2 = connString2 } // 初始化方法,赋值给父类
        override fun connect (connString1: String) { println('${databaseName}连接...(${connString1})') }
        override fun close () { println('${databaseName}关闭') }
    }
    
    // 类扩展方法,String 类添加 add() 相当于 var content: String 变量可 content.add()
    fun String.add (x: Int = 10, y: Int = 20): Int { return x + y }
    
    fun main (args: Array<String>) {
        // 基础类实现抽象类和接口
        var oracle = Oracle('Oracle数据库连接串')
        oracle.showInfo()
        // with 调用方法
        with (oracle) {
            connect()
            close()
        }
        // 匿名类实现接口
        var mockDB = object : IDatabase {
            override fun connect (connString1: String) { println('匿名数据库连接...(${connString1})') }
            override fun close () { println('匿名数据库关闭') }
        }
        mockDB.connect('匿名连接串')
        mockDB.close()
    }
    

    相关文章

      网友评论

          本文标题:kotlin - 学习笔记

          本文链接:https://www.haomeiwen.com/subject/gcjgrktx.html