Kotlin學習筆記記錄

關(guān)鍵字:
var:定義變量
val:定義常量
fun:定義方法
Unit:默認方法返回值踱侣,類似于Java中的void粪小,可以理解成返回沒什么用的值
vararg:可變參數(shù)
$:字符串模板(取值)
位運算符:or(按位或),and(按位與)泻仙,shl(有符號左移)糕再,shr(有符號右移),
ushr(無符號右移)玉转,xor(按位異或)突想,inv(按位取反)
in:在某個范圍中
downTo:遞減,循環(huán)時可用究抓,每次減1
step:步長猾担,循環(huán)時可用钉迷,設(shè)置每次循環(huán)的增加或減少的量
when:Kotlin中增強版的switch茉盏,可以匹配值盼理,范圍抡柿,類型與參數(shù)
is:判斷類型用妓羊,類似于Java中的instanceof()

在Kotlin里嘲驾,可以用“?”表示可以為空写半,也可以用“!!”表示不可以為空屿衅。
例如:
var num:Int? = null
val v1 = num?.toInt() //不做處理返回 null
val v2 = num?.toInt() ?:0 //判斷為空時返回0
val v3 = num!!.toInt() //拋出空指針異常(用“!!”表示不能為空)

用var定義變量(像js)
用val定義常量(相當于final)

// 定義變量 必須要初始化
private var name: String? = ""
private val id: String = "122222"
// 簡化 Kotlin支持類型推斷
private var name = ""

// Elvis操作符 ?: 使用變量 如果name為空返回1 也可以寫成name?:1
var name : String? = "xxxx"
name = null
println("length==========" + (name?.length?:1))

// 類型轉(zhuǎn)換
val b: Byte = 1
val i: Int = b.toInt()

// 類型判斷符 is
//obj在&&右邊自動動轉(zhuǎn)換成"String"類型
if (obj is String && obj.length > 0){
return obj.length
}

// 范圍操作符 .. 以及 in
if (i in 1..10) { // 等價于 1 <= i && i <= 10
println(i)
}

// 未知類型強轉(zhuǎn) 必須是對應(yīng)類型不然拋出異常
var mPwdtoggle = findViewById(R.id.findpwd_btn_eye) as CheckBox

// 創(chuàng)建對象 Kotlin實例化一個對象時不需要new關(guān)鍵字
var list = ArrayList()

//定義參數(shù)的類型
fun makeTool(id:Int){ //參數(shù)id為Int類型
}

//定義函數(shù)的返回值
fun getAddr(id:Int):String{ //返回值為String類型
}

// var 延遲加載
private lateinit var default : String
fun initDefault(str : String){
default = str
}

// val 懶加載 只有在第一次被調(diào)用時畅卓,才會初始化
private val laz : String by lazy{
"懶加載"
}
private val mTextView : TextView by lazy {
findViewById(R.id.money_text) as TextView
}
private val mm by lazy {
findViewById(R.id.money_text) as TextView
}

// 區(qū)間和集合
if(x in 1..5){ ...//檢查x數(shù)值能否在1到5區(qū)間
if(name in list){...//檢查list中能否有某個元素(比Java簡潔多了)
for(i in 1..5){ ...//遍歷1到5
for(item in list){...//遍歷list中的每個元素(相當于Java的for(String item : list))

// 數(shù)據(jù)類
// 關(guān)鍵字Any 等于Object

class Client {
var id: Long = 0
var name: String? = null
var birth: Int = 0
}
// 簡寫
data class Client(var id:Long, var name:String, var birth:Int)
// 添加共享對象 Client.VERSION
data class Client(var name:String){
companion object{
val VERSION = "我是共享對象"
}
}
// 單例 Client2.run()
object Client2 {
val VERSION = "我是共享對象"
init {
println("==========初始化")
}
fun run(){
println("==========run")
}
}

// 輸入表達式
val x = 2
val y = 3
println("===========$x ${x + y}")

// 表達式 替換java switch
override fun onClick(v: View?) {
when (v?.id) {
R.id.button3 -> Toast.makeText(this, "1111", Toast.LENGTH_LONG).show()
R.id.button34 ->{
}
// 相等于default
else -> Toast.makeText(this, "2222", Toast.LENGTH_LONG).show()
}
}

// when自動轉(zhuǎn)型
when (view) {
is TextView -> toast(view.text)
is RecyclerView -> toast("Item count = ${view.adapter.itemCount}")
is SearchView -> toast("Current query: ${view.query}")
else -> toast("View type not supported")
}

// 類繼承
abstract class Persons{
var name:String? = null
}

class Student : Persons(){
var names:String? = null
}

// 泛型
abstract class DList<T>{
var t: T? = null
}

class Studen : DList<Int>(){
var name:String? = null
}

// 數(shù)組
var arr = arrayOf(1, 2)
stringTempl(arr)
fun stringTempl(args: Array<String>) {

}

// for循環(huán)
val arr = arrayListOf<String>("1111", "2222")
// 迭代角標
for (j in arr.indices) {
println("1=========" + j)
}

var list = ArrayList<String>()
list.add("xxx")
list.add("qqq")
// 迭代數(shù)據(jù)
for(str in list){
println("2=========" + str)
}

// 全局方法:不寫類直接寫方法就是全局方法
// 方法簡寫
fun run1(num:Int):Int{
return num + 2
}

fun run2(num:Int) = num + 2

// 回調(diào)寫法
button.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
}
})

// lambda表達式 就是把接口名擅腰、方法名和參數(shù)類型省掉不寫再加個-> 適用于一個方法的接口
// 單參數(shù)
button.setOnClickListener{ view ->

}
// 多參數(shù)
button.setOnEditorActionListener({ v, id, event ->
false
})
// 多方法
button.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener{
override fun onViewDetachedFromWindow(p0: View?) {
}
override fun onViewAttachedToWindow(p0: View?) {
}
})

// 擴展方法 連class和interface都不寫,直接在文件中寫fun方法
// 類方法擴展 創(chuàng)建kt文件 不需要寫類 直接寫方法就可以 相當于全局方法
public fun View._run(str :String){
Toast.makeText(BaseApplication.getContext(), str, Toast.LENGTH_SHORT).show()
}

擴展方法:
Kotlin中的方法可以直接定義在文件中翁潘,而不需要依賴于任何的類趁冈,這個稱為擴展方法。
成員方法:
而寫在class或object中的方法則稱成員方法拜马。
本地方法:
定義在方法內(nèi)部的方法渗勘,可以訪問外部函數(shù)的私有成員!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末俩莽,一起剝皮案震驚了整個濱河市旺坠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌豹绪,老刑警劉巖价淌,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件申眼,死亡現(xiàn)場離奇詭異,居然都是意外死亡蝉衣,警方通過查閱死者的電腦和手機括尸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來病毡,“玉大人濒翻,你說我怎么就攤上這事±材ぃ” “怎么了有送?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長僧家。 經(jīng)常有香客問我雀摘,道長,這世上最難降的妖魔是什么八拱? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任阵赠,我火速辦了婚禮,結(jié)果婚禮上肌稻,老公的妹妹穿的比我還像新娘清蚀。我一直安慰自己,他們只是感情好爹谭,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布枷邪。 她就那樣靜靜地躺著,像睡著了一般诺凡。 火紅的嫁衣襯著肌膚如雪东揣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天腹泌,我揣著相機與錄音救斑,去河邊找鬼。 笑死真屯,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的穷娱。 我是一名探鬼主播绑蔫,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼泵额!你這毒婦竟也來了配深?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤嫁盲,失蹤者是張志新(化名)和其女友劉穎篓叶,沒想到半個月后烈掠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡缸托,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年左敌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俐镐。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡矫限,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出佩抹,到底是詐尸還是另有隱情叼风,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布棍苹,位于F島的核電站无宿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏枢里。R本人自食惡果不足惜孽鸡,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坡垫。 院中可真熱鬧梭灿,春花似錦、人聲如沸冰悠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溉卓。三九已至皮迟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間桑寨,已是汗流浹背伏尼。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留尉尾,地道東北人爆阶。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像沙咏,于是被迫代替她去往敵國和親辨图。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法肢藐,類相關(guān)的語法故河,內(nèi)部類的語法,繼承相關(guān)的語法吆豹,異常的語法鱼的,線程的語...
    子非魚_t_閱讀 31,587評論 18 399
  • Google在今年的IO大會上宣布理盆,將Android開發(fā)的官方語言更換為Kotlin,作為跟著Google玩兒An...
    藍灰_q閱讀 76,767評論 31 489
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗凑阶。 張土汪:刷leetcod...
    土汪閱讀 12,724評論 0 33
  • google宣布Kotlin作為andorid一級開發(fā)語言有一段時間了猿规。在這段時間,我也在新的模塊上嘗試使用了ko...
    鋒ivy閱讀 1,027評論 1 2
  • 最近看到朋友圈瘋轉(zhuǎn)的《我是范雨素》晌砾,除了對作者及文內(nèi)所述贊同外坎拐,感受最深的是讀到她寫到媽媽的片段,我腦海里出現(xiàn)大大...
    泥鰍媽閱讀 306評論 0 0