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
}