kotlin基礎(chǔ)筆記之類把沼、接口、函數(shù)和基本語法

純粹是個人學習總結(jié)吁伺,如有不對的地方請吐槽饮睬。

kotlin包概念

其實kotlin類和包沒有直接的聯(lián)系,包名可以和文件存放的路徑不一致篮奄。
比如文件的存放地址是:com.xxx.yyy捆愁,包名可以是 package com.yyy.xxx

Imports關(guān)鍵字

在java中是用于導入的
在kotlin中也是導入作用的,它可以導入類窟却,包昼丑,變量等等,導入方式和java也是一樣的
如果包有沖突可以用以下方式重命名
import foo.Bar // Bar 可以使用
import bar.Bar as bBar // bBar 代表 'bar.Bar'
在這里as關(guān)鍵字的作用就是將bar.Bar變成bBar來代表

定義一個kotlin類

//普通類定義
package com.yyy.xxx
class A{
    fun a(){
      println("這是一個無參無返回值的方法")
    }
  }

//有繼承關(guān)系的類
 package com.yyy.xxx
  class KotlinActivity : AppCompatActivity(){
  //實現(xiàn)父類的方法
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_kotlin)
    }
}
創(chuàng)建Kotlin類實例
val a = A()
跳轉(zhuǎn)到KotlinActivity:
startActivity(Intent(this, MainActivity::class.java))

kotlin嵌套類

函數(shù)定義

只有一個表達式的函數(shù)定義

fun sum(a: Int, b: Int):Int = a + b  也可以 fun sum(a: Int, b: Int) = a + b
//后面的定義就是編譯器可以推導出返回值類型夸赫,就可以不寫返回值類型

沒有返回值的函數(shù)定義

fun sum():Unit{ println("無參無返回值函數(shù)") }也可以fun sum(){ println("無參無返回值函數(shù)") }

默認參數(shù)函數(shù)定義

fun sum(b: Int, off: Int = 0, stepNum: Int = 1) {
}
調(diào)用方式:sum(10)//沒有傳遞的參數(shù)就等于默認值菩帝,這樣可以減少重載

命名參數(shù)函數(shù)定義

fun sum(str: String, isMax: Boolean = true,a: Char = ' ') {
}
調(diào)用方式:
1.默認參數(shù)調(diào)用sum(str)
2.命名參數(shù)調(diào)用sum(str,isMax=true,a='a')或者sum(str,a='a')
這種方式調(diào)用,代碼可讀性更強,更加靈活,沒有傳遞的參數(shù)就是默認值
注意:命名參數(shù)語法不能夠被用于調(diào)用Java函數(shù)中,因為Java的字節(jié)碼不能確保方法參數(shù)命名的不變性

中綴符號

//給 Int 定義一個擴展方法
infix fun Int.shl(x: Int): Int {
}
調(diào)用方式:1 shl 2 或者 1.shl(2)
注意:只能有一個參數(shù)

函數(shù)擴展
在不繼承類的情況下增加方法叫Extensions(擴展函數(shù))茬腿,我們需要在函數(shù)前加一個接收者類型作為前綴如給MutableList<Int> 添加一個 swap 函數(shù):

fun MutableList<Int>.swap(x: Int, y: Int) {
    val tmp = this[x] // this 對應(yīng) list
    this[x] = this[y]
    this[y] = tmp
}
調(diào)用方式:
val l = mutableListOf(1, 2, 3)
l.swap(0, 2)
在swap() 函數(shù)中this持有的值是l

關(guān)于擴展的更多說明

變長參數(shù)函數(shù)定義

fun <T> asList(vararg ts: T): List<T> {
    val result = ArrayList<T>()
    for (t in ts)
        result.add(t)
    return result
}
調(diào)用方式:asList(1,2,3)或者asList(1,2,3,4,5)呼奢,參數(shù)長度可隨意變換

只有一個參數(shù)可以被標注為 vararg,如果vararg并不是列表中的最后一個參數(shù),那么后面的參數(shù)需要通過命名參數(shù)語法進行傳值,再或者如果這個參數(shù)是函數(shù)類型,就需要通過lambda法則.
如果參數(shù)中有一個是數(shù)組怎么傳遞切平?

val a = array(1, 2, 3)
val list = asList(-1, 0, *a, 4)
a變量在傳遞時一定要加前面的*號

局部函數(shù)定義
在一個函數(shù)里面包含一個函數(shù)

fun dfs(graph: Graph) {
    fun dfs(current: Vertex, visited: Set<Vertex>) {
        if (!visited.add(current)) return
        for (v in current.neighbors)
            dfs(v, visited)
    }
    dfs(graph.vertices[0], HashSet())
}

更多函數(shù)說明:https://huanglizhuo.gitbooks.io/kotlin-in-chinese/content/FunctionsAndLambdas/Functions.html

接口定義
interface MyInterface {
    fun bar()
    fun foo() {
        //函數(shù)體是可選的
    }
}
接口實現(xiàn)
class Child : MyInterface {
    fun bar () {
        //函數(shù)體
    }
}
和java一樣一個類可以實現(xiàn)一個或多個接口

更多接口說明

基本語法

變量聲明
var聲明可變變量 
var i = 1
i = 2
println("i:"+i)
輸出結(jié)果:i:2

val聲明只讀變量
val j = 1
val k:Int//只聲明沒有賦值
j=2//編譯會報錯
k = 3//第一次賦值握础,編譯通過
val就相當于java的final
if else

if else 和java的用法基本一致,kotlin沒有三目運算符那怎么實現(xiàn)呢悴品,就是用if else如:

var j = if(number>3) 0 else 1
when

when用法相當于java中的switch禀综,但是比switch強大
when的判斷條件可以重復(fù),如果重復(fù)了苔严,就按照最先原則匹配定枷。

while do ..while 循環(huán)

他們的用法和java中完全相同

字符串
賦值var str = "abc"
拼接:str+="def"http://拼接后abcdef

模板字符串
println("${str}123");//打印abcdef123
運算:
var a=1
var b = 2
println("${str}123${a+b}");//打印abcdef1233
范圍表達式
創(chuàng)建范圍需要...操作符如:var i=1..10//i中包含1,2,3,4,5,6,7,8,9,10
創(chuàng)建降序范圍:var i = 3 downTo 1//i中包含3,2,1
步長范圍創(chuàng)建:var i = 1..10 step 5//i中包含1,6 降序也是一樣的
in操作符
判斷是否在某個范圍
if (x in 1..10)
print("x:${x}是在1-10之間")
判斷不在某個范圍
if (x !in 1..10)
print("x:${x}不在1-10之間")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市邦蜜,隨后出現(xiàn)的幾起案子依鸥,更是在濱河造成了極大的恐慌,老刑警劉巖悼沈,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贱迟,死亡現(xiàn)場離奇詭異姐扮,居然都是意外死亡,警方通過查閱死者的電腦和手機衣吠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門茶敏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缚俏,你說我怎么就攤上這事惊搏。” “怎么了忧换?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵恬惯,是天一觀的道長。 經(jīng)常有香客問我亚茬,道長酪耳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任刹缝,我火速辦了婚禮碗暗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘梢夯。我一直安慰自己言疗,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布颂砸。 她就那樣靜靜地躺著噪奄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沾凄。 梳的紋絲不亂的頭發(fā)上梗醇,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音撒蟀,去河邊找鬼叙谨。 笑死,一個胖子當著我的面吹牛保屯,可吹牛的內(nèi)容都是我干的手负。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼姑尺,長吁一口氣:“原來是場噩夢啊……” “哼竟终!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起切蟋,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤统捶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喘鸟,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡匆绣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了什黑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崎淳。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖愕把,靈堂內(nèi)的尸體忽然破棺而出拣凹,到底是詐尸還是另有隱情,我是刑警寧澤恨豁,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布嚣镜,位于F島的核電站,受9級特大地震影響圣絮,放射性物質(zhì)發(fā)生泄漏祈惶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一扮匠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凡涩,春花似錦棒搜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至育韩,卻和暖如春克蚂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背筋讨。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工埃叭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悉罕。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓赤屋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親壁袄。 傳聞我的和親對象是個殘疾皇子类早,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

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