Kotlin學(xué)習(xí)

1.變量的聲明和使用

? ?var 聲明變量

? ?val 聲明常量

? ?kotlin的數(shù)據(jù)類型:Byte Short Int Long Float Double String

? ?java的數(shù)據(jù)類型:byte short int long float double boolean char

? ?kotlin會通過類型推斷數(shù)據(jù)類型

? ?可以用冒號(:)來顯示指定數(shù)據(jù)類型

? ?例:var name="張三" //存放字符串類型的數(shù)據(jù)

? ? ? ? ? ?var j:Short =1;

? ? ? ? ? ?var s:String="123456"

? ? ? ? ? ?val n="abc"http://只讀數(shù)據(jù)類型

2.函數(shù)

? ? 函數(shù)格式:fun 函數(shù)名(參數(shù)名:參數(shù)類型):返回值類型{

????????????????????????函數(shù)體

? ? ? ? ? ? ? ? ? ? }

? ? 字符串模板:字符串模板是在字符串中添加若干個(gè)占位符余爆,內(nèi)容會在后期指定

? ? 格式: $值币狠,${表達(dá)式}

? ? 例:var temp="kotlin${content}"

3.條件控制

? ? 3.1 if語句

? ? ? ? if(表達(dá)式){

? ? ? ? }else{

? ? ? ? }

3.2 when語句

Java中的switch中锻弓,是通過 case 值: 類型來對相應(yīng)情況進(jìn)行處理辫狼,而Kotlin是使用 -> 一個(gè)類似箭頭方式牺弹;

默認(rèn)情況,Java中是使用default指定除了所有定義的case情況以外的情況,而Kotlin是使用else屎媳;

例:fun studentLevel(score:Int):String{

? ? ? ?var level=when(score){

? ? ? ? ? ? 5 ->"A"

? ? ? ? ? ? 4 ->"B"

? ? ? ? ? ? 3 ->"C"

? ? ? ? ? ? else ->"D"

? ? ? ? }

? ? ? return level

? ? }

4.字符串比較

4.1 ==?

比較兩個(gè)字符串脖捻,如果兩個(gè)字符串的內(nèi)容一致阔逼,在Java中使用 str1 == str2 時(shí),是比較兩個(gè)字符串的地址值地沮,但是在kotlin中嗜浮,則不是如此,比較的只是字符串的內(nèi)容摩疑。

4.2?equals(str:String)

方法中的參數(shù)是與之對比的字符串危融,默認(rèn)不忽略大小寫,即大小寫敏感

4.3?equals(str:String,ignoreCase:Boolean)

方法中有兩個(gè)參數(shù)雷袋,第一個(gè)參數(shù)是與之對比的字符串吉殃,第二個(gè)參數(shù)是布爾類型的值,是否忽略大小寫楷怒,ture為忽略字母大小寫

5. 空值處理

fun hello(str:String):String{//接收一個(gè)參數(shù)醇份,參數(shù)的非空的string類型淳衙,加上問好(?)代表的是參數(shù)可以是空

? ? return "你好," + str

}

6.Loop和Range

6.1 開區(qū)間和閉區(qū)間

開區(qū)間用(a,b)來表示,不包含兩個(gè)端點(diǎn)

閉區(qū)間用[a,b]來表示讥电,包含兩個(gè)端點(diǎn)

使用 1 .. 100 定義了 [1捕捂,100] 的區(qū)間蚀之,包含1和100

使用 1 until 100 定義了 [1,100) 的區(qū)間,其中包括了1-99的數(shù)每界,不包含100

step指定每一次遍歷是以多少個(gè)為單位

例:

var num1=1..20//[1.20]

var num2=1 until 20//[1.20)

for(num in num1){

Log.e("Main",num.toString());

}

for(num in num1 step 5){

Log.e("Main",num.toString());

}

7. List和Map

kotlin中的集合和其他語言不通,kotlin集合分為可變和不可變集合

kotlin集合包含三種類型家卖,List眨层、Set、Map

它們都是接口上荡,并不是實(shí)際的類趴樱。

它們都繼承至Collection接口,而Collection又繼承與Iterable接口。它們幾乎上只實(shí)現(xiàn)了isEmpty()酪捡、size屬性叁征、get()、contains()等方法逛薇。這一點(diǎn)和Java類似捺疼。

這三種集合類型分別有存在MutableList、MutableSet永罚、MutableMap接口啤呼,這些接口中提供了改變、操作集合的方法呢袱。例如add()官扣、clear()、remove()等函數(shù)羞福。

7.1 List類型

例1:使用listOf()初始化不可變的List類型集合

val arr = arrayOf("1","2",3,4,5)?

?val list1 = listOf(1,2,"3",4,"5") // 隨意創(chuàng)建?

?val list2 = listOf("1","2","3","4","5") // 確定元素的值類型

val list3 = listOf(arr) // 可傳入一個(gè)數(shù)組以下代碼是錯(cuò)誤的惕蹄。

因?yàn)長ist只能是不可變集合。而add坯临、remove、clear等函數(shù)時(shí)MutableList中的函數(shù)

list1.add()

list1.remove

...// 遍歷

for(value in list1){

? ? print("$value \t")

}

結(jié)果:1 2 3 4 5


例2:使用mutableListOf()初始化不可變的List類型集合

val arr = arrayOf("1",2,3,4)

val mutableList1 = mutableListOf(1,2,"3",4,"5") // 隨意創(chuàng)建?

?val mutableList2 = mutableListOf("1","2","3","4","5") // 確定元素的值類型

val mutableList3 = mutableListOf(arr) // 可傳入一個(gè)數(shù)組

val mutableList : ArrayList // 這里的ArrayList<>和Java里面的ArrayList一致

mutableList1.add("6") // 添加元素

mutableList1.add("7")

mutableList1.remove(1)? // 刪除某一元素

// 遍歷

for(value in mutableList1){

? ? print("$value \t")

}

mutableList1.clear()? // 清空集合

結(jié)果:2 3 4 5 6 7

7.2 Set類型

Set類型集合會把重復(fù)的元素去除掉恋昼。這一點(diǎn)和Java是不謀而合的看靠。這個(gè)特性也是Set類型集合與List集合類型的區(qū)別所在。

7.3 Map類型

Map類型集合和List以及Set都有著差別液肌。

不可變的Map類型集合的初始化使用:mapOf()函數(shù)

可變的Map類型集合的初始化使用:mutableMapOf()函數(shù)

注意:當(dāng)我們的鍵存在重復(fù)時(shí)挟炬,集合會過濾掉之前重復(fù)的元素

例1:

// 以鍵值對的形式出現(xiàn)嗦哆,鍵與值之間使用to

val map1 = mapOf("key1" to 2 , "key2" to 3)

val map2 = mapOf(1 to "value1" , 2 to "value2")

val mutableMap = mutableMapOf("key1" to 2 , "key1" to 3)

val hashMap = hashMapOf("key1" to 2 , "key1" to 3) // 同Java中的HashMap

map2.forEach{

? ? key,value -> println("$key \t $value")

}

結(jié)果:key1 value1

key2? ? value2


8. 異常處理

try{

}catch (e:Exception){

}

9. 面向?qū)ο?/p>

例:定義一個(gè)學(xué)生類

????????class Person{

????????????var name:String

????????????var age:Int=0 //Int類型必須初始化

? ? ????????constructor(name:String,age:Int){//構(gòu)造方法

????????????????this.name=name

????????????????this.age=age

????????????????}

????????????}

9.1 三大特征

9.1.1 封裝

就是把客觀事物封裝成抽象類谤祖,并且類可以把自己的數(shù)據(jù)和方法讓可信的類或?qū)ο蟛僮?/p>

優(yōu)點(diǎn):1)良好的封裝能夠減少耦合

2)類內(nèi)部結(jié)構(gòu)可以自由修改

3)可以對變量成員進(jìn)行更精細(xì)的控制

4)隱藏信息,實(shí)現(xiàn)細(xì)節(jié)

9.2 繼承

9.2.1 讓某個(gè)類的對象獲得另一個(gè)類型對象的屬性的方法

在kotlin中老速,所有的類在默認(rèn)情況下都無法被繼承粥喜,就是說所有類在默認(rèn)情況下都是final,如果想被繼承橘券,需要使用關(guān)鍵字open额湘,只有被open修飾的類才可以被繼承

例:open class?Person(name:String,age:Int){

????????}

9.2.2 類的方法重新

在kotlin中卿吐,類中的方法也是final類型,是不能被重寫的锋华,也需在方法前面加上open關(guān)鍵字后才可以嗡官;子類要重寫父類中open修飾的方法,需在子類的方法前面加override關(guān)鍵字

例:open class Color{

????????????open fun name(){?

????????????????println("red")

????????????}

????????????fun type(){

?????????????????println("7 ColorS")?

?????????????}

}

????????class Blue:Color() {

????????????????override funname(){?

?????????????????println("blue")?

?????????????}

????????}


9.3 多態(tài)

指一個(gè)類實(shí)例的相同方法在不同情形有不通表現(xiàn)形式

優(yōu)點(diǎn):

1)可消除類型間的耦合關(guān)系

2)可替換性

3)可擴(kuò)充性

4)接口性

5)靈活性

6)簡化性

多態(tài)存在的三個(gè)必要條件:

1)繼承

2)重新

3)父類引用指向子類對象

10. 抽象類和接口

10.1 抽象類

abstract class 抽象類名[(主構(gòu)造函數(shù))][: 繼承父類和實(shí)現(xiàn)接口] {……}

注:即使不用 open 關(guān)鍵字修飾毯焕,抽象類也是可以被繼承的衍腥,想想也很容易明白,因?yàn)槌橄箢惐緛砭褪怯脕砝^承的纳猫,所以就可以省略open關(guān)鍵字婆咸。

例:abstract class Man{...... }

10.2 接口

interface??接口類名[: 繼承的接口] {……}

例:interface Person

? ? ? ?class Student:?Person,Man(){

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市续担,隨后出現(xiàn)的幾起案子擅耽,更是在濱河造成了極大的恐慌,老刑警劉巖物遇,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乖仇,死亡現(xiàn)場離奇詭異,居然都是意外死亡询兴,警方通過查閱死者的電腦和手機(jī)乃沙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诗舰,“玉大人警儒,你說我怎么就攤上這事】舾” “怎么了蜀铲?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長属百。 經(jīng)常有香客問我记劝,道長,這世上最難降的妖魔是什么族扰? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任厌丑,我火速辦了婚禮,結(jié)果婚禮上渔呵,老公的妹妹穿的比我還像新娘怒竿。我一直安慰自己,他們只是感情好扩氢,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布耕驰。 她就那樣靜靜地躺著,像睡著了一般录豺。 火紅的嫁衣襯著肌膚如雪耍属。 梳的紋絲不亂的頭發(fā)上托嚣,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天,我揣著相機(jī)與錄音厚骗,去河邊找鬼示启。 笑死,一個(gè)胖子當(dāng)著我的面吹牛领舰,可吹牛的內(nèi)容都是我干的夫嗓。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼冲秽,長吁一口氣:“原來是場噩夢啊……” “哼舍咖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起锉桑,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤排霉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后民轴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體攻柠,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年后裸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瑰钮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,567評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡微驶,死狀恐怖浪谴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情因苹,我是刑警寧澤苟耻,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站扶檐,受9級特大地震影響凶杖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蘸秘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一官卡、第九天 我趴在偏房一處隱蔽的房頂上張望蝗茁。 院中可真熱鬧醋虏,春花似錦、人聲如沸哮翘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饭寺。三九已至阻课,卻和暖如春叫挟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背限煞。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工抹恳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人署驻。 一個(gè)月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓奋献,卻偏偏與公主長得像,于是被迫代替她去往敵國和親旺上。 傳聞我的和親對象是個(gè)殘疾皇子瓶蚂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評論 2 359

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