Kotlin
安卓开发
变量声明
变量声明相关
常量(不可修改)
不可修改变量为 val
变量(可修改)
可修改变量为 var
方法
关键字为 fun
流程控制
流程控制
if else
1 2 3 4 5
| fun testValue(a: Int, b: Int): Int = if (a < b) b else a
|
when
1 2 3 4 5 6
| fun getNum(name: String) = when { name == "a" -> 10 name == "b" -> 20 else -> 30 }
|
循环
多种循环方式
while
1 2 3 4 5 6
| var s = 3
while (s > 0) { println(s.toString()) s -= 1 }
|
for in 循环
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| for(i in 0..10) { println("test for .. ->" + i.toString()) }
for(i in 0 until 10) { println("test for until ->" + i.toString()) }
for(i in 0 until 10 step 2) { println("test for step ->" + i.toString()) }
for(i in 10 downTo 0 step 2) { println("test for downTo step ->" + i.toString()) }
|
类 class
封装
继承
多态(接口)
关键字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| private
public
protected
internal
object
data
open
interface
|
接口
1 2 3 4 5 6 7 8 9
| interface Study { fun readBook() fun doHomework() { println("default") } }
|
定义可被继承类
1 2 3 4 5 6 7 8
| open class Person(val name: String, val age: Int) {
fun each() { println("name is " + name + ". age is " + age) } }
|
定义类 继承类 接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| class Student(val son: String, val grade: Int, name: String, age: Int): Person(name, age), Study {
constructor(name: String, age: Int): this("", 0, name, age) {}
constructor(): this("", 0) {}
private fun log() { println(son + " " + grade + " " + name + " " + age) }
override fun readBook() { println(this.name + " is reading") this.log() } }
|
单例类
1 2 3 4 5 6
| object Cont { fun log() { println("Cont ok" + this.name) } }
|
实例化类
1 2 3 4 5 6 7 8
| val student = Student("son", 1, "wang", 12)
val student = Student("wang", 12)
val student = Student()
|
数据类
使用关键字 data
声明数据类
会根据参数,自动生成 equals()
,hashCode()
,toString()
等固定无实际逻辑意义的方法
1 2 3 4 5 6 7 8 9
| data class Cellphone(val name: String, val price: Double)
val one = Cellphone("nokia", 12.98)
val two = Cellphone("nokia", 12.98)
println("one equals two " + (one == two))
|
集合
get(index)
用于获取 list 指定下标值
List 集合
listOf
1 2 3 4 5 6 7
| val list = listOf<String>("a", "b", "c")
for(i in list) { println(i) }
|
mutableListOf
1 2 3 4
| val mlist = mutableListOf<String>("e", "f", "g")
mlist.add("h")
|
Set 集合
底层使用 hash 映射机制存放数据,集合中的元素无法保证有序。
setOf
1 2 3 4
| val setlist = setOf<String>("a", "b", "c") for(i in setlist) { println(i) }
|
Map 集合
hashMapOf
1 2 3 4 5 6 7 8 9 10
| val hmp = hashMapOf<String, Int>()
hmp.put("a", 1)
hmp["b"] = 2
val num = hmp["b"]
|
mapOf
1 2
| val maps = mapOf<Int, String>(1 to "a", 2 to "b")
|
mutableMapOf
1 2 3 4 5
| val hsMap = mutableMapOf<String, Int>("a" to 1, "b" to 2)
hsMap["c"] = 3
|
集合 函数式 API
maxOf
1 2 3 4 5 6 7 8
| val list = listOf<String>("a", "ab", "abc")
val n = list.maxOf {it.length}
val v = list.maxOf {it}
|
map
1 2
| var m = list.map { it.uppercase() }
|
filter
1 2 3 4 5
| val n = m.filter { it.length == 2 }
.map {it.uppercase()}
|
any
判断集合中是否至少存在一个元素满足指定条件
1 2
| val r = list.any {it.length == 2}
|
all
判断集合中是否所有元素均满足指定条件
1 2
| val r = list.all {it.length == 2}
|
操作符
三元,非空,let,字符串拼接等…
?可为空 ?: 如果左侧有值使用左侧 否则使用右侧
1 2
| fun test(msg: String?): Int = msg?.length ?: 0
|
!! 非空断言
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| var cont:String? = "abc"
fun main() { if(cont != null) { val str = teNull() println(str) } }
fun teNull(): String = cont!!.uppercase()
|
obj.let
1 2 3 4 5 6 7
| fun doFun(study: Study?) { study?.let { it.readBook() it.doHomework() } }
|
字符串拼接
1 2 3 4
| var name: String = "wang ke"
println("my name is $name")
|
函数默认值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| fun testFun(str: String, num: Int = 100) { println("str = $str num = $num") }
testFun("abc")
fun testFun(str: String = "hello", num: Int) { println("str = $str num = $num") }
testFun(num = 12)
|
Android
权限
1 2
| // 拨打电话权限 <uses-permission android:name="android.permission.CALL_PHONE" />
|
跳转
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| val intent = Intent(this, SendActive::class.java)
intent.putExtra("EXT", "my_ext")
startActivity(intent)
startActivityForResult(intent, 1)
verride fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) when (requestCode) { 1 -> if(resultCode == RESULT_OK) { val myData = data?.getStringExtra("data") Toast.makeText(this, "$myData", Toast.LENGTH_SHORT).show() } } }
|
被跳转界面接收参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class SendActive: AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.send_layout)
val value = intent.getStringExtra("EXT") textView.setText(value) textView.setOnClickListener { val intent = Intent() intent.putExtra("data", "return msg") setResult(RESULT_OK, intent) finish() } } }
|