kotlin基础

一、数据类型(无基础数据类型,均为对象)

类型位数
Double64
Float32
Long64
Int32
Short16
Byte8
UByte8
UShort16
UInt32
ULong64

二、可见性修饰符

三、定义属性

(1)var定义变量

(2)val定义常量

(3)支持类型自动推导

(4)属性可空(如String?),空安全调用(?.),为空重新赋值(?:)

四、类型转换

(1)is类型判断(满足类型判断条件,会自动进行类型转换)

(2)as类型转换

(3)as?安全类型转换

五、for循环

// 集合遍历
for (item in collection) {
}

// 1到4递增循环 1,2,3,4
for (i in 1..10) {
}

// 8到0以2为步长进行递减8,6,4,2,0
for (i in 8 downTo 0 step 2) {
}

//遍历map
for ((a, b) in mapOf("1" to 1, "2" to 2)){
    Log.e("aa", "*******$a  $b")
}

六、when(高级版的switch)

when(){
  a == 1 -> {}
  b == "test" -> {}
  c -> {}
  else -> {}
}

七、相等性

(1)==值相等

(2)===引用相同

(3)对于Int、Double、Long、Short、Byte、String,===和==值相同

八、函数(参数也可以是函数)

fun test(toNext: (result: String) -> Unit){
}

九、类

(1)主构造函数(如无注解或可见性修饰,constructor可省略)

class Person constructor(name: String){}

(2)次构造函数

class Person{
   constructor(name: String){}
}

(3)init代码块

class Person{
    init {}
}

(4)执行顺序:主构造函数--》init--》次构造函数

十、open(被open修饰的类才可以继承,被open修饰的方法才可以重写)

十一、this表达式

class A{
   fun testA() {}
   //inner定义内部类关键字
   inner class B {
      fun test() {
          //内部类调用外部类方法需要@外部类
          this.@A.testA()
      } 
   }
}

十二、数据类(自动给我们提供了getter、setter、equals、hashCode、toString、copy方法)

data class Test(val t: String)

注:反序列化不支持默认值

1、fastjson对于默认值情况会报异常

//需要添加org.jetbrains.kotlin:kotlin-reflect依赖
val str  = "{\"strOne\":\"11\"}"
val test = JSON.parseObject(str, Test::class.java)

data class Test (val strOne: String, val strTwo: String = "aa"): Serializable

2、gson不会报异常但无法获取到默认值,为null

val str  = "{\"strOne\":\"11\"}"
val test = Gson().fromJson(str, Test::class.java)

data class Test (val strOne: String, val strTwo: String = "aa"): Serializable

十三、扩展(如在文件根位置定义扩展则全局可用;如在class中定义扩展则只能在该类中使用)

1、扩展函数

fun Context.toast(text: String){
    Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
}

2、扩展属性

var Context.test: String
    get() = this.test
    set(value) {
        this.test = value
    }

十四、委托

1、函数委托

 interface A{
    fun print()
 }
    
class AA : A{
    override fun print() {
        Log.v("aa", "这是AA")
    }
}
    
class AAA(aa: AA): A by aa  //将AAA的print()委托给aa

AAA(AA()).print() //输入“这是AA”

2、属性委托

(1)by lazy懒加载

/*
* mode共三种模式
* (1)LazyThreadSafetyMode.SYNCHRONIZED(默认)多线程同步
* (2)LazyThreadSafetyMode.PUBLICATION  哪个线程先获取值就用该值
* (3)LazyThreadSafetyMode.NONE 没有线程同步,线程不安全
*/
val str: String by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { "这是 by lazy" }

(2)by Delegates.observable观察者模式

//之后每次对str赋值都会调用这里的方法(即使oldValue与newValue一样)
var str: String by Delegates.observable("初始值") { property, oldValue, newValue ->
    Log.v("aa", "******$oldValue    $newValue")
}

十五、"""(字符串所见即所得,支持多行、包含"无需转义)

val aa = """
    你想测试一下什么?
    测试多行和""
    哈哈看结果吧
"""

十六、use函数,自动close功能,如下无需bufferReadable.close()

fun readFile(file: File): String{
    val bufferReadable = file.bufferedReader()
    bufferReadable.use {
        return it.readLine()
    }
    return ""
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值