學(xué)習(xí)筆記之——初識Kotlin

? ? ? ? ?2017年8月7號Android 之神 Jake Wharton 加入Google纽乱,J 神的推文提到叉庐,他加入了 Google Android Framework Team究珊,并且專注在 Kotlin 領(lǐng)域,今年 IO 期間 Google 宣布了 Kotlin 作為 Android 開發(fā)的官方語言。未來 Kotlin 在 Android 開發(fā)者中的份量會(huì)越來越大,這一消息對于好好學(xué)習(xí)Kotlin就更有動(dòng)力了窖杀。

? ? ? ? ? 從kotlin被大家所熟知到現(xiàn)在裙士,我就一直在想要自學(xué)一下入客,但是由于各種原因(趕項(xiàng)目等等)都沒去付諸實(shí)踐。感覺也是蠻幸運(yùn)的腿椎,進(jìn)入的這家新公司剛好有個(gè)帶我的安卓大神桌硫,主要用kotlin開發(fā)項(xiàng)目。以下所寫皆是基礎(chǔ)知識酥诽,熟知的大神們可自動(dòng)忽略O(shè)(∩_∩)O ? ? 首先介紹一個(gè)kotlin自學(xué)的網(wǎng)站鞍泉,有興趣的可以點(diǎn)進(jìn)去學(xué)習(xí)點(diǎn)擊打開鏈接

1.要想用kotlin開發(fā)安卓首先要安裝插件

2.配置項(xiàng)目根.gradle文件

3.配置Module的.gradle文件

4.如果運(yùn)行時(shí)遇到這樣的錯(cuò)誤

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.lxlproject.kotlin/com.lxlproject.kotlin.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.lxlproject.kotlin.MainActivity" on path: DexPathList[[zip file "/data/app/com.lxlproject.kotlin-2/base.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_dependencies_apk.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_slice_0_apk.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_slice_1_apk.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_slice_2_apk.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_slice_3_apk.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_slice_4_apk.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_slice_5_apk.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_slice_6_apk.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_slice_7_apk.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_slice_8_apk.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.lxlproject.kotlin-2/lib/x86, /system/lib, /vendor/lib]]

以上報(bào)錯(cuò)主要是Module的.gradle文件配置出錯(cuò)的原因皱埠,根據(jù)步驟3修改一下即可

5.把MainActivity轉(zhuǎn)換成Kotlin代碼

Kotlin plugin包含了一個(gè)有趣的特性肮帐,它能把Java代碼轉(zhuǎn)成Kotlin代碼。正如任何自動(dòng)化那樣边器,結(jié)果不會(huì)很完美训枢,但是在你第一天能夠使用Kotlin語言開始編寫代碼之前,它還是提供了很多的幫助忘巧。所以我們在MainActivity.java類中使用它恒界。打開文件,然后選擇Code->Convert Java File to Kotlin File砚嘴。對比它們的不同之處十酣,可以讓你更熟悉這門語言涩拙。

6.基礎(chǔ)知識點(diǎn)大集結(jié)

(1)變量:變量可以很簡單地定義成可變(var)和不可變(val)的變量

(2)可null類型:指定一個(gè)變量是可null是通過在類型的最后增加一個(gè)問號?耸采。因?yàn)樵贙otlin中一切都是對象(甚至是Java中原始數(shù)據(jù)類 ? ? ? ? ? 型)兴泥,一切都是可null的。所以虾宇,

當(dāng)然我們可以有一個(gè)可null的integer:

一個(gè)可nul類型搓彻,你在沒有進(jìn)行檢查之前你是不能直接使用它。這個(gè)代碼不能被編譯:

前一行代碼標(biāo)記為可null嘱朽,然后編譯器就會(huì)知道它旭贬,所以在你null檢查之前你不能去使用它。還有一個(gè)特性是當(dāng)我們檢查了一個(gè)對 ? ? ?象的可null性搪泳,之后這個(gè)對象就會(huì)自動(dòng)轉(zhuǎn)

型成不可null類型稀轨,這就是Kotlin編譯器的智能轉(zhuǎn)換:

當(dāng)然kotlin是可以做到更簡潔有力的,如下可以簡化上面代碼為:

這里我們使用了安全訪問操作符(?)岸军。只有這個(gè)變量不是null的時(shí)候才會(huì)去執(zhí)行前面的那行代碼靶端。否則,它不會(huì)做任何事情凛膏。并且我們甚至可以使用__Elvis operator__(?:):

因?yàn)樵贙otlin中throw和return都是表達(dá)式杨名,他們可以用在__Elvis operator__操作符的右邊:

然后,我們可能會(huì)遇到這種情景猖毫,我們確定我們是在用一個(gè)非null變量台谍,但是他的類型卻是可null的。我們可以使用!!操作符來強(qiáng)制編譯器執(zhí)行可null類型時(shí)跳過限制檢查:

上面的代碼將會(huì)被編譯吁断,但是很顯然會(huì)奔潰趁蕊。所以我們要確保只能在特定的情況下使用。通常我們可以自己選擇作為解決方案仔役。如果一份代碼滿篇都是!!掷伙,那就有股代碼沒有被正確處理的氣味了。

(3)If表達(dá)式:

在Kotlin中一切都是表達(dá)式又兵,也就是說一切都返回一個(gè)值任柜,if表達(dá)式總是返回一個(gè)value。如果一個(gè)分支返回了Unit沛厨,那整個(gè)表達(dá)式也將返回Unit宙地,它是可以被忽略的,這種

情況下它的用法也就跟一般Java中的if條件一樣了逆皮。

(4)when表達(dá)式:

或者你甚至可以從對參數(shù)做需要的幾乎瘋狂的檢查擺脫出來宅粥。它可以使用簡單的if/else鏈替代:

(5)for循環(huán):

(6)while/do…while表達(dá)式:

******踩過的坑:

(1)int類型變量轉(zhuǎn)String

用習(xí)慣了java總會(huì)不自覺直接在int類型變量之后加 + “” 即可,例如:

kotlin是不支持醬紫的电谣,而是要在int變量直接就加 "" +

(2)獲取 [1,2,3,…] 數(shù)組

(3)構(gòu)造方法

(4)tollrbar設(shè)置單個(gè)右邊菜單按鈕

(5)tollrbar設(shè)置多個(gè)右邊菜單按鈕

(6)界面跳轉(zhuǎn)傳參方法


7.Android Studio3.0版本之后支持kotlin ?只需要在新建項(xiàng)目的時(shí)候勾選支持kotlin即可

簡單的demo下載:傳送門

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秽梅,一起剝皮案震驚了整個(gè)濱河市抹蚀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌企垦,老刑警劉巖况鸣,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異竹观,居然都是意外死亡镐捧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門臭增,熙熙樓的掌柜王于貴愁眉苦臉地迎上來懂酱,“玉大人,你說我怎么就攤上這事誊抛×形” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵拗窃,是天一觀的道長瞎领。 經(jīng)常有香客問我,道長随夸,這世上最難降的妖魔是什么九默? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮宾毒,結(jié)果婚禮上驼修,老公的妹妹穿的比我還像新娘。我一直安慰自己诈铛,他們只是感情好乙各,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著幢竹,像睡著了一般耳峦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上焕毫,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天蹲坷,我揣著相機(jī)與錄音,去河邊找鬼咬荷。 笑死冠句,一個(gè)胖子當(dāng)著我的面吹牛轻掩,可吹牛的內(nèi)容都是我干的幸乒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼唇牧,長吁一口氣:“原來是場噩夢啊……” “哼罕扎!你這毒婦竟也來了聚唐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤腔召,失蹤者是張志新(化名)和其女友劉穎杆查,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體臀蛛,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡亲桦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浊仆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片客峭。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖抡柿,靈堂內(nèi)的尸體忽然破棺而出舔琅,到底是詐尸還是另有隱情,我是刑警寧澤洲劣,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布备蚓,位于F島的核電站,受9級特大地震影響囱稽,放射性物質(zhì)發(fā)生泄漏郊尝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一战惊、第九天 我趴在偏房一處隱蔽的房頂上張望虚循。 院中可真熱鬧,春花似錦样傍、人聲如沸横缔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茎刚。三九已至,卻和暖如春撤逢,著一層夾襖步出監(jiān)牢的瞬間膛锭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工蚊荣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留初狰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓互例,卻偏偏與公主長得像奢入,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子媳叨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

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