写在前面的乱七八糟的话:此为Kotlin学习路上的第三篇文章,希望各位大神不吝赐教,
源文件从包的声明开始的:
package demo
fun main(args : Array<String>){
val b = arrayOfNulls<Int>(4)
b.set(0,2)
println(b[0])
}
源文件中的所有声明都被包声明包括。如果没有指定包名,则这个文件的内容从属于默认的”Default”包
♣ 我们通过”import”关键字来完成倒入指令
import demo.UserBean //倒入一个单独的名字
import demo.* //倒入kotlin下所属的所有内容
如果存在命名冲突
import demo.UserBean //daoru UserBean
import test.UserBean as User //User代表testUserBean
♣ 可见性和包嵌套:如果最顶层的声明标注为private,那么它自己对应包私有。如果包内有私有 属性或方法,那么他对所有的子包是可见的,包外的成员默认是不倒入的,即倒入demo.UserBean后不能直接使用demo.PersonBean
在Kotlin中,if是可以作为一个表达式的。是除了condition?then:else之外的唯一一个三元表达式。
//传统的用法,和Java中相似
var max= a
if(a < b)
max=b
//带else
var max : Int
if(a < b)
max=b
else
max=a
//作为一个三元表达式
val max = if(a > b) a else b
if表达式中的分支可以作为块,最后一表达式为该块的值
val max =if(a > b){
print("这是分支")
a
}else{
print("这也是分支")
b
}
如果if只有一个分支,或其分支返回的结果为Unit则其值为Unit
与Java相比,在Kotlin中用when取代了switch。简单来说:
fun testWhen(x : Any){
when(x){
1 ->print("this is num")
"1" ->print("this is string")
"English" -> print("this is English")
else{
print("this is shit")
}
}
}
when 会检查所有的分支知道有一个条件满足。when同样可以用作表达式或者声明。作为表达式时,满足条件的表达式即为总的表达式,当用作声明时分支的值会被忽略(像 if 表达式一样,每个分支是一个语句块,而且它的值就是最后一个表达式的值)。例如:
fun testWhen(x :Any):String{
var a = when(x){
1-> 1 //表达式有参数
in 1..10-> "在1~10的区间内" //表达式无参数
is String ->"为 String" //可以用任意条件作为表达式分支
else{
print("默认情况")
"sx"
}
}
return a
}
由上述代码可以看出,当when表达式有参数时实现了Java中的switch的效果,当when表达式无参数时实现了Java中的if else if语句的效果
注意:when语句与密封类可以一起使用而不需要写else分支。
在遍历某个队列时,Koglin中的for循环与Java中不同的是:Java通过”for(item : list)” 而Kotlin中则是使用”for(item in list)” .例如:
var strArray:Array<String> =arrayOf("这是1","这是2","这是3")
for(i in strArray){
print("$i,\n")
}
另一方面,Kotlin废除了”for(初始;条件;增减)”这个规则,若要实现该功能则应为”for(i in array.indices)” 其中indices表示该数组对象的下标数组,所以上面代码可以改为:
var strArray:Array<String> = arrayOf("这是1","这是2","这是3");
for(i in strArray.indices){
print("${strArray[i]} \n")
}
Kotlin将Java中的while保留了下来,同时do/while也和Java中的用法相同,在这里不进行过多赘述。
Kotlin保留了Java中的break和continue关键字。但同时Kotlin中可以为表达式添加标签,两者结合可以产生一些新的变化。例如:
fun test(){
val strList:Array = arrayOf("这是1","这是2","这是3")
val intList:Array = arrayOf(1,2,3)
demo@ for(j in intList){
print("$j \n")
for(i in strList.indices){
if(i===0) print("${strList[i]} \n")
if(i===1) break@demo//此处会跳转出外层循环(即:打破了break只能跳出当前循环的限制)
if(i===2) print("${strList[i]} \n")
}
}
}
此处只做一个最简单的例子,关于标签的应用,后面的文章中会详细讨论。