kotlin基础知识点
1.字符串的截取
fun main(args: Array<String>){
val text ="""
|多⾏字符串
|多⾏字符串
""".trimMargin()//使⽤该函数去除前置空格时需要有边界前缀,边界前缀不打印.直接使⽤.trim()会只有去除第⼀⾏的空格println(text)// 输出有⼀些前置空格,
}
运⾏结果:
2. 不⽀持 “/” 转义
fun main(args: Array<String>){
val price ="""
${'$'}9.99
"""
println(price)// 求值结果为 $9.99
}
3. vararg 关键字可变参数
fun vars(vararg v:Int){
for(vt in v){
print(vt)
}
}
// 测试
fun main(args: Array<String>){
vars(1,2,3,4,5)// 输出12345
}
4. lambda关键字 (匿名函数)
// 测试
fun main(args: Array<String>){
val sumLambda:(Int, Int)-> Int ={x,y -> x+y}
println(sumLambda(1,2))// 输出 3
}
5. NULL 处理
//类型后⾯加?表⽰可为空
var age: String? = "23"
//抛出空指针异常
val ages = age!!.toInt()
//不做处理返回 null
val ages1 = age?.toInt()
//age为空返回-1
val ages2 = age?.toInt() ?: -1
6. 遍历数组
fun main(args: Array<String>){
val items =listOf("apple","banana","kiwi")
for(item in items){
println(item)enum函数
}
for(index in items.indices){
println("item at $index is ${items[index]}")
}
}
输出结果:
apple
banana
kiwi
item at 0 is apple
item at 1 is banana
item at 2 is kiwi
7. for 循环的跳步执⾏及翻转
fun main(args: Array<String>){
for(i in1..4)print(i)//1234
println()
for(i in4 downTo 1)print(i)//4321
println()
for(i in1..4 step 2)print(i)//13
println()
for(i in4 downTo 1 step 2)print(i)//42
println()
for(i in1 until 10){// i in [1, 10), 不包含 10
print(i)//123456789
}
}
8. lable的使⽤
1.给内侧for-break 添加标签只能打印20~25的数字,只能跳出内侧循环
(可以说这⾥添加标签相当于没有添加标签,因为break关键字本⾝就是要跳出所在的循环圈)
fun main(args: Array<String>){
for(i in1..10){
loop@for(index in20..30){
print("$index,")
if(index ==25)break@loop
}
print("*$i*")
}
}
截图有限,结果是循环了10次
给外侧for-break添加标签可以跳出外侧循环
fun main(args: Array<String>){
loop@for(i in1..5){
for(index in20..30){
print("$index,")
if(index ==25)break@loop
}
print("*$i*")
}
}
只打印⼀次20~25
3.给return 添加标签,不添加下⾯的标签时将结束整个函数,即end不打印
fun main(args: Array<String>){
val indexes =arrayOf(1,2,3,4,5,6,7)
//forEach是内联函数
indexes.forEach loop@{
if(it >5){
return@loop
}
println(it)
}
println("End")
}
4.注意if语句的条件判断,==return会跳过这次循环,>号是永久性的跳出(与3对⽐看)
fun returnDemo2(){
println("START : "+::returnDemo2.name)
val intArray =intArrayOf(1,2,3,4,5,6,7)
intArray.forEach here@{
if(it ==3)return@here//指令跳转到lambda表达式标签here@处。
println(it)//继续下⼀个it = 4遍历循环
}
println(" END : "+::returnDemo2.name)//结果1、2、4、5、6、7
}
9.field 关键词只能⽤于属性的访问
var lastName: String ="zhang"
get()= UpperCase()// 将变量赋值后转换为⼤写set
var no: Int =100
get()= field // 后端变量
set(value){
if(value <10){// 如果传⼊的值⼩于 10 返回该值 field = value
}else{
field =-1// 如果传⼊的值⼤于等于 10 返回 -1 }
}
var heiht: Float =145.4f
private set
}
// 测试
fun main(args: Array<String>){
var person: Person =Person()
person.lastName ="wang"
println("lastName:${person.lastName}")
< =9
println("no:${}")
< =20
println("no:${}")
}
输出结果为:
lastName:WANG
no:9
no:-1
10. 匿名内部类
var v ="成员属性"
fun setInterFace(test: TestInterFace){
}
}
/**
* 定义接⼝
*/
interface TestInterFace {
fun test()
}
fun main(args: Array<String>){
var test =Test()
/**
* 采⽤对象表达式来创建接⼝对象,即匿名内部类的实例。
*/
test.setInterFace(object: TestInterFace {
override fun test(){
println("对象表达式创建匿名内部类的实例")
}
})
}
11. 扩展函数(类似java中的装饰者设计模式)
// 扩展函数 swap,调换不同位置的值
fun MutableList<Int>.swap(index1: Int, index2: Int){
val tmp =this[index1]// this 对应该列表,注意是对应脚标位置的值进⾏的替换
this[index1]=this[index2]
this[index2]= tmp
}
fun main(args: Array<String>){
val l =mutableListOf(1,2,3)
// 位置 0 和 2 的值做了互换,
l.swap(0,2)// 'swap()' 函数内的 'this' 将指向 'l' 的值
String())
}
实例执⾏输出结果为:
[3,2,1]
12. 扩展函数和成员函数⼀致,优先使⽤成员函数
class C {
fun foo(){println("成员函数")}
}
fun C.foo(){println("扩展函数")}
fun main(arg:Array<String>){
var c =C()
c.foo()
}
实例执⾏输出结果为:
成员函数
13. 扩展函数是静态解析的
在调⽤扩展函数时,具体被调⽤的的是哪⼀个函数,由调⽤函数的的对象表达式来决定的,⽽不是动态的类型决定的(这样说来其实感觉kotlin很⽆脑,给他指定是谁就是谁,不会由调⽤者来动态的决定)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论