- 变量 条件 循环 异常 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()
}
网友评论