Kotlin續(xù)(一)

1、靜態(tài)類和變/常量:

如果整個類都是靜態(tài)的,可使用Object 來修飾類

object TestData {
    val TAG = TestData::class.java.simpleName

    fun test1(): String {
        return "123"
    }
}

如果只是類中的一部分是靜態(tài)的,那么我們可以使用companion object 來修飾方法或變/常量

class TestData {
    val TAG = TestData::class.java.simpleName
    fun test1(): String {
        return "123"
    }
    companion object {
        val testString = "我是一個靜態(tài)常量"
        fun test2(): String {
            return "我是一個靜態(tài)方法"
        }
    }
}

就想這樣,用companion object{ }把靜態(tài)變/常量、方法包裹起來就好了

2、構造方法 和多構造方法

2.1只有一個構造方法
class SMSMessage(messageType: Int) {
    var MessageType: Int? = null

    //為構造方法的參數賦值
    init {
        this.MessageType = messageType
    }
}
2.2只有一個構造方法

在構造方法中添加'var'/'val'關鍵字,就等于為此類添加了這個屬性,不用再聲明屬性和初始化

class SMSMessage(var messageType: Int) {
    
    //為構造方法的參數賦值
    init {
     
    }
}
2.2主構造方法和多個次構造方法

次構造方法不會走init初始化方法

class EventMessage constructor(messageType: Int) {
    var MessageType: Int? = null
    var MessageFlag: Boolean? = null
    var MessageString: String? = null

    init {
        MessageType = messageType
    }

    //次構造方法一
    constructor(messageType: Int, messageFlag: Boolean) : this(messageType) {
        MessageFlag = messageFlag
    }
    //次構造方法二
    constructor(messageType: Int, messageString: String) : this(messageType) {
        MessageString = messageString
    }
}

3、類的擴展方法

這里有一個類,由于某些原因不方便修改次類,我們可以為此類添加一個擴展方法

class NoticeBean(var NoticeTitle: String, var NoticeContent: String)  {
 
}

聲明擴展方法和什么普通方法幾乎一致,需要在方法名前邊添加類名

    fun NoticeBean.toJson(bean: NoticeBean) {
        LogUtils.loge("JSON:${MiJsonUtil.getJson(bean)}")
    }

擴展方法的使用

 val testBean = NoticeBean("小米標題", "小米內容")
 testBean.toJson(testBean)

4、for循環(huán)

4.1until和..的區(qū)別
  //打印 0,1,2,3,4
    for (index in 0 until 5) {
        System.err.println(index)
    }
//打印 0,1,2,3,4,5
    for (index in 0 .. 5) {
        System.err.println(index)
    }
//不想以1為增量
    for (index in 1..100 step 2){
        System.err.println(index)//會輸出1..3..5......
    }
//如果想實現(xiàn)下邊這種效果
     for (int i = 0; i < 100; ) {
         i++;
     }
//可以這樣寫
    var i = 0
    while (i < 100) {
        i++
    }
4.2跳出循環(huán)
        //這里注意,return@outside 必須寫在 run ounside@{}里邊,而return@forEach不用
        run outside@{
            (0..10).forEach {
                LogUtils.loge("aaaaaaa==${it}")
                if (it % 2 == 0) {
                    //跳出當前循環(huán) 相當于continue
                    LogUtils.loge("${it}")
                    return@forEach
                }
                if (it == 9) {
                    //跳出整個循環(huán),相當于break
                    return@outside
                }
            }
        }

5、聲明暫不實例化的變量(lateinit關鍵字)

lateinit 關鍵字表示不用IDE管這個是不是為空了,后邊在使用的時候肯定不會為空的

lateinit var mRoomDetailsViewpager: ViewPager

6、“==”于“===”

  • “==”是比較的兩個對象的值
  • “===”是比較的兩個對象的存儲地址
    var mes = arrayListOf<String>("1", "2", "3")
    var mes1 = arrayListOf<String>("1", "2", "3")
    var mes2 = mes
    System.err.println(mes == mes1)//true
    System.err.println(mes === mes1)//false
    System.err.println(mes == mes2)//true
    System.err.println(mes === mes2)//true

7、聲明變量的?

//聲明一個可為空的變量
var userName:String?=null
//如果一個變量可能是空的,那么在使用的時候,就要處理一下
//1、如果name是空的,就不走?后邊的了
 println(userName?.length ?: 5)
userName?.let { println(it.length) }
//2、不管name是不是空的,都會走后邊,這時候如果name是空的,那么就會報空指針異常
println(userName!!.length)
//3、像java一樣,在使用之前先判斷一下是不是空的
if(userName!=null){
userName.length
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容