美文网首页
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