Kotlin语法总结

Kotlin语法总结

  • 变量、常量

    var  val  类型自动推断  
    latinit var  
    val b: String by lazy{}  
    不支持自动转型 如Int不会自动转为Float  
    new类的时候不需要new关键字
  • 函数

    方法声明  参数    返回值  
    fun     a: Int   写在方法名后面  
    方法表达式
    
    方法参数默认值(name: String = "abc"
  • 符号

    and==>&
    or==>|  
    a.not()==>!a
    in  1..10==>[1,10]   step 2
    1 until 10==>[1.10)   
    10 downto 1==>[10,1]  
    Any==>Object  
    is==>instanceOf  并且不需要强转  如果强转使用as
    list.forEach{
    print(it)  //如果只有一个参数,可以直接使用it
    }
    ===  比地址
    == 相当于equals
  • when表达式

    when(obj){
     true->{}
     1,2->{}  
      else->{}
    }
  • 数组、集合

    arrayOf
    listOf
    setOf<Int>()
    mapOf<String,String>("1" to "2")
    map["1"] = "3"
    
    可变参数 vararg  
  • 空安全

    var list: List<String>? = null
    list!!.size()  为空会抛异常
    list?.size()  为空不执行
    list?.size ?: 0  为空走默认值
  • 面向对象

    修饰符  public(默认) internal protected private
    主构造方法  类名后写 
    class Animal(var name: String)  加入varval则变为全局变量  也可以写init方法
    
    二级构造方法
    如果有主构造方法必须引用主构造方法,如果没有则不用引用
    
    Getter Setter
    var age: Int = 0  //默认带有setter getter
    var name: String = ""
          get() = field
          set(value){
            field = value
          }
    
    继承 
    类默认是final的,如果使其能被继承,则需要声明open
    关键字 :
    如果父view有多个构造方法,则可以写多个二级构造方法 比如自定义View,如果要想该View既能在代码中使用,又想在xml中使用,则写主构造方法就不太合适
    
  • 数据模型类

    构造方法中至少有一个属性,切必须有var val修饰
    自动重写equals()  hashCode()  toString()方法
    data class Animal(var name: String? = null, var age: Int)
    如果需要无参构造方法调用,后面再分别赋值,则可以给其里面的参数声明默认值
  • 伴生对象

    伴随着类诞生的对象,仅有一个
    class MyFragment:Fragment{
      companion object{
         const val TAG = "aaa"  //public static final String TAG
         fun newInstance():MyFragment = MyFragment
      }
    }
    
    单例
    object User{
    
    }
  • 接口,内部类,Lambda表达式

    内部类默认是静态内部类,只有使用inner修饰才变成非静态内部类,持有外部类的引用
    
    setOnClickListener{ print(it.id) }
    thread{ //TODO }
    
  • 反射

    扫描二维码关注公众号,回复: 1803220 查看本文章
    MainActivity::class //KotlinKClass类型
    MainActivity::class.java //JavaClass类型

猜你喜欢

转载自blog.csdn.net/qq_33666539/article/details/80860495