kotlin简单研究1

其实这个是比较早了,写得也比较匆忙,zz

控制流

if,for,while

在kotlin中 forwhile 的变化不大,if 语句的变化就是每个代码块的最后一行可以作为这个if语句的返回值

1
2
3
4
5
6
7
if (a > b) a else b

if (a > b) {
a
} else {
b
}

switch -> when

kotlin中when是switch的升级版,因为when支持各种条件语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

var number:Int = 0
var bool:Int = 0
var char:Int = 0
var other:Int = 0
var array = ArrayList<Any>()
array.add(1)
array.add(2)
array.add('a')
array.add("a")
array.add(false)
array.add(1.5)
array.add(ArrayList<Any>())


for (i in array.iterator()) {
when(i) {
is Number -> number ++
true -> bool ++
false -> bool ++
is Char,is String -> char ++
else -> other ++
}
}

标签,返回,中断,继续

return,break,continue

标签的作用就是用来标记表达式,上面的3个操作符可以通过标签,直接操作这个标签的表达式

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
27
28
29
30
31
32
33
34
35
36
// 联动:http://my.oschina.net/yuanhonglong/blog/469546
fun LabelDemo() {
hello@ for (i in 1..9) {
for (j in 1..9) {
if (i < j) {
println()
continue@hello //break
}
print("[$i,$j] ")
}
}
println()

var array = ArrayList<Any>()

array.add(intArrayOf(1,2,3))
array.add(intArrayOf(4,5,6))
array.add(intArrayOf(7,8,9))

var f = run({
findNumber@ {
number:Int ->
findNumber2@ array.forEach {
findNumber3@ (it as IntArray).forEach {
if (it.equals(number)) {
return@findNumber "find"
}
}
}
return@findNumber "not find"
}
})

println("${f(0)}")
println("${f(1)}")

}

this表达式

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
27
28
29
30
// demo 2
class Label2Class {
init {
var inner:innerClass = innerClass()
}
inner class innerClass { // implicit label @B
init {
var a:Int = 0;
a.foo()
}
fun Int.foo() { // implicit label @foo
val a = this@Label2Class // A's this
val b = this@innerClass // B's this

val c = this // foo()'s receiver, an Int
val c1 = this@foo // foo()'s receiver, an Int
run {
println("a is ${a.out()}")
println("b id ${b.out()}")
}
}
fun out():String {
return "innerClass"
}
}

fun out() :String {
return "Label2Class"
}
}

静态变量 和 静态方法 与 伴生对象

在kotlin 里面,不支持类里面有外面能够直接访问的 静态变量 和 方法,但是放到 伴生对象里面就可以让外面访问

1
2
3
4
5
class song {
companion object {
//...
}
}

安全性检查

? 允许变量为空
!! 变量如果为空会抛除异常
不带上面2个符号默认为!!

1
2
3
4
5
6
7
8
9
class NotNullClass {
var numberA:Int? = null
var numberB:String = "123"

fun getNumberA() : Int {
numberA = 1
return numberA!!
}
}

demo2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class TreeClass(length:Int) {
var node:TreeClass? = null
init {
if (length > 0) {
node = TreeClass(length -1)
}
}
companion object {
fun showTreeLength(treeClass: TreeClass) {
var length = -1
var nextTree:TreeClass? = treeClass
do {
length ++
nextTree = nextTree?.node
} while(nextTree != null)
println("TreeClass treeLength $length")
}

}
}

文章目录
  1. 1. 控制流
    1. 1.1. if,for,while
    2. 1.2. switch -> when
  2. 2. 标签,返回,中断,继续
    1. 2.1. 静态变量 和 静态方法 与 伴生对象
    2. 2.2. 安全性检查