美文网首页
kotlin基础之一 变量常量

kotlin基础之一 变量常量

作者: 大鹏的鹏 | 来源:发表于2018-11-22 14:32 被阅读3次

    语法

    一,语法.

    1.1var 与 val.
    • kotlin中,var符号表示的是变量,可以多次重复赋值。
    • 而val表示的是“常量”,但这并不是通俗意义上的常量。本质上val也是变量,但一次赋值之后,不能再次修改,只能作为【只读变量】。
    var str: String = ""中,str是变量名,:String,表明该变量是String类型变量,后面就是赋值语句。
    
    var str= ""省略了声明变量类型,它可以根据赋的值而自动推断出类型。
    
    1.2 可空变量和不可空变量.

    定义变量时,可在类型后面加一个问号?,表示该变量是Nullable,不加表示该变量不可为null。

            var s:String? = null
            var s2:String = null //如果该变量被赋值为null,则编译不通过
    

    对于可以为null的变量,在使用该变量的时候,必须用变量名+?(如上面的s?)的形式进行调用,表示如果该变量为null,则不执行该变量调用的方法。如:

        s = "yyy"//赋值时不需要使用s?形式
        var l= s?.length//如果s为null,则不执行length方法
    

    当s为null时,不会执行length方法,从而避免了java中频繁的空指针异常。

    1.3后期初始化与延迟初始化.

    当在类中定义一个变量(属性)的时候是必须初始化的。这在平时的实际开发中能满足大部分的需求。但比如说:Android开发中对组件变量的声明与赋值等。这就需要Kotlin中特有的后期初始化属性来满足这个需求了。这里就需要用到延时初始化.
    后期初始化

      private lateinit var txtView: TextView
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            txtView = findViewById(R.id.txt_main)
            setText()
        }
    
        fun setText() {
            txtView.text = "这是一段测试代码"
        }
    

    注意

    • 使用lateinit关键字
    • 必须是可读且可写的变量,即用var声明的变量
    • 不能声明于可空变量。
    • 不能声明于基本数据类型变量。例:Int、Float、Double等,注意:String类型是可以的。
    • 声明后,在使用该变量前必须赋值,不然会抛出UninitializedPropertyAccessException异常。
      延时初始化
      所谓延迟初始化即:指当程序在第一次使用到这个变量(属性)的时候在初始化。
     private val aTextView by lazy {
            findViewById<TextView>(R.id.txt_main)
        }
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            setText()
        }
    
        fun setText() {
            aTextView.text = "这是一段测试代码"
        }
    
    • 使用lazy{}高阶函数,不能用于类型推断。且该函数在变量的数据类型后面,用by链接。
    • 必须是只读变量,即用val声明的变量。

    相关文章

      网友评论

          本文标题:kotlin基础之一 变量常量

          本文链接:https://www.haomeiwen.com/subject/hjllqqtx.html