1. 说明
.java 必须是一个 public 的class
.kt toplevel 可以是 变量,常量,类,多个, 混合
2. 声明变量
lateinit var str:String //不能null,必须引用类型 var sstr:String by lazy("by lazy string") //委托懒加载 不可变量 const val π = 3.14 //不允许改变
3. 函数
fun div(c: Int, d:Float = 1f){ } fun more(vararg a: Int): Int{ return a.get(0) + a.get(1)+a.get(2) }
4. 语法
4.1 for 语句
private fun demo() { //打印 0 至 10 for (i in 0..10) { println(i) } // 打印 0 至 9 for (i in 0 until 10) { println(i) } // 打印 0 至 10 步长为 2 for (i in 0..10 step 2) { println(i) } // 打印 10 至 0 步长为 2 for (i in 10 downTo 0 step 2) { println(i) } }
4.2 when 语法
private fun demo1(i: Type) { // var i:Type when (i) { i is String -> { println("i") } i !is Float -> { } i in 0..10 -> { } else -> { } } }
5. 类
5.1 class
//class class AClass() { //属性 var name: String = "" lateinit var b: String //不能null,必须引用类型 //函数 fun getSomeInfo(): String { this::b.isInitialized //是否初始化 boolean return "" } }
5.2 object
//object object ObClass { //成员函数,属性,单例静态函数 fun a1() {} }
5.3 data class
//data class data class DaClass(var name: String, var age: Int = 20) { var grade: String = "" }
5.4 sealed class
//sealed class //密封类, 类似枚举类型作用 必须在同一个kt文件内去声明 sealed class SlClass() data class Ac(var a: Int) : SlClass() object obc: SlClass()
6. 构造函数
6.1 常用的构造函数
class ClassA(private var b: Int = 9) class ClassB private constructor(var a: Int) { var b = a fun test() { var c = b } } class ClassC { constructor() constructor(b: Int) constructor(a: Int, n: String = "") init { // init some data } }
6.2高阶函数
var s: String? = null //高阶函数 //also, with, let, apply, run private fun demo() { //执行 s 的情况下,再做什么事 s?.also { } // s?.let { } s?.apply { } with(s){ } s?.run { } //java.Observer: 表示包名在多个重复类引用的时候用到,类名相同,包名不同 //typealias ob = java.Observer }