1、定義全局對象不初始化 例如:
private lateinit var mAudioManager : AudioManager //lateinit是關鍵,表示延遲初始化
2、繼承與接口實現 例如:
MyExoPlayerActivity : AppCompatActivity(),OnOperationListener{}
類似於java :
MyExoPlayerActivity extends AppCompatActivity implements OnOperationListener{}
3、var表示可變變量,val表示不可變變量類似java中的final
4、接口回調有兩種常用方式 例如:
第一種,回調接口只有一個方法,如setOnClickListener的參數OnClickListener回調監聽中只有onClick(View v)一個方法,則可以直接是使用
setOnClickListener{it:View//裏面寫點擊後要做的事情,相當於onClick(View v)方法,it就是v}
第二種,回調接口有多個方法,如setOnScrollListener的參數OnScrollListener含有onScrollStateChanged(AbsListView view, int scrollState)以及onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)兩個方法,則可以
setOnScrollListener(object : AbsListView.OnScrollListener{ //鼠標右擊這裏然後點擊彈出欄
Generate再點擊Implement Methods即可找到對應實現方法})
5、空判斷
對於聲明可爲空的參數如(list: ArrayList<String>?)類型後面加?表示可爲空,在使用時進行空判斷處理,有兩種處理方式
第一種字段後面加!!像java一樣拋出異常如list!!.size
第二種字段後面加?爲空不做處理直接返回null,或配合?:做空判斷處理
list?.size?:0 //表示若爲空時返回0,不爲空返回list.size
類似java
list != null ? list.size : 0
6、when表達式常用
kotlin沒有switch,用when代替,常用方式
when(參數,可以爲任意類型){
條件1 -> {}
條件2 -> {}
...
}
7、數組常用方式
var list = arrayListOf("1","2","3")
8、let,with,run函數,可以省略對象名的重複書寫,如一個對象user
class user{
public string name = ”li“
public string sex = ”man“
}
裏含有屬性名name和sex,賦值時需
user.name = ”li“
user.sex = ”man“
若用let函數,則可以
var user = User().let {
it.name = "li"
it.sex = "nan"
}
若用with函數,則可以
var user = User()
with(user){
name = ”li“
sex = ”man“
}
若用run函數,則可以
var user = User().run { //相比let省了it,相比with少了傳參數
name = "li"
sex = "nan"
}
also函數相當於let函數,apply函數相當於run函數,只不過他們最後會return user,而上面函數不會
9、跳轉activity
startActivity(Intent(context,XXXActivity::class.java))
10、一個類中的匿名內部類需指定爲 inner class才能使用該類的全局變量
11、在string中使用$字符讀取字段值 例如:
var mOldX = 1
var string = "mOldX = $mOldX”
則 string輸出值爲 mOldX = 1
12、類中靜態方法使用
第一種,將整個類定義爲靜態類,裏面的方法和變量都爲靜態
的
object LogU {
private var isLog = false
fun setIsLog(b: Boolean) {
isLog = b
}
}
調用方式
LogU.setIsLog()
第二種,使用companion object,類似於Java 中使用類訪問靜態成員,靜態方法
class LogUtil {
companion object {
private var isLog = false
fun setIsLog(b: Boolean) {
isLog = b
}
fun <T>LogMsg(cls:Class<T>,msg :String){
}
}
}
調用方式
LogUtil.setIsLog(true)
LogUtil.LogMsg(this@MainActivity::class.java,"==")
13、經過const修飾的常量,纔是java中理解的常量
const val LEVEL_LOW = 1;
等於Java,沒加const修飾相當於每final
public static final LEVEL_LOW = 1;