前言
之前的時(shí)候再項(xiàng)目中使用過(guò)Kotlin 了,但是總感覺(jué)自己對(duì)于Kotlin 的認(rèn)識(shí)有點(diǎn)淺薄浅侨。所以仗颈,專(zhuān)門(mén)重新學(xué)習(xí)了一下。
開(kāi)發(fā)準(zhǔn)備 :
開(kāi)發(fā)工具 : IntelliJ IDEA
開(kāi)發(fā)語(yǔ)言 : kotlin
開(kāi)發(fā)調(diào)整: 1. IntelliJ 默認(rèn)字體很小订歪,所以調(diào)大一些 2.設(shè)置IntelliJ 不區(qū)別大小寫(xiě)
-
創(chuàng)建項(xiàng)目
選擇項(xiàng)目的時(shí)候勾選kotlin
image.png
創(chuàng)建kotlin 主函數(shù)的時(shí)候刷晋,千萬(wàn)不要將自己創(chuàng)建的.kt 文件創(chuàng)建稱(chēng)為有一個(gè)類(lèi)眼虱,而是創(chuàng)建成為一個(gè)文件捏悬。然后润梯,在文件中直接使用主函數(shù)。
開(kāi)始學(xué)習(xí)
main方法(主函數(shù))
我們知道刀疙,在java 中任何方法都是從主函數(shù)開(kāi)始運(yùn)行的谦秧。主函數(shù)的寫(xiě)作方法如下:
public class Demos {
public static void main(String[] args) {
}
}
那么我嗎知道油够,在kotlin 中使用主函數(shù)的話(huà)石咬,是這個(gè)樣子的:
fun main(arras: Array<String>){
}
大家可以看見(jiàn)左側(cè)的Demo.kt 是灰色的鬼悠,那么很多的人就會(huì)感覺(jué)到特別的難受焕窝,所以维贺,我們可以這個(gè)樣子進(jìn)行使用
class Demoss {
companion object{
@JvmStatic
fun main(args:Array<String>){
}
}
}
當(dāng)然溯泣,經(jīng)過(guò)我的測(cè)試垃沦,這個(gè)里面有三個(gè)注意點(diǎn):
- 將文件內(nèi)添加 companion objec{} 肢簿,這個(gè)代碼塊,相當(dāng)于java 中的static關(guān)鍵字
- 2.添加@JvmStatic 注解
- 3.main函數(shù)必須是該模板的桩引,當(dāng)然參數(shù)名稱(chēng)可以修改坑匠,可以添加返回值
kotlin 文件也變?yōu)榱艘粋€(gè)類(lèi)的形式進(jìn)行展示笛辟,而不是.kt 的文件進(jìn)行使用
方法(函數(shù))
在kotlin 中方法的構(gòu)建格式如下
fun 方法名(參數(shù)名:參數(shù)類(lèi)型):返回值類(lèi)型 { 代碼塊的內(nèi)容 }
我們知道方法的構(gòu)建功氨,那么我們就坐幾個(gè)小例子:
- 要求 : 定義一個(gè)方法,計(jì)算機(jī)兩個(gè)數(shù)的和
那么我們這邊根據(jù)模板套入得出如下的結(jié)果:
fun sum(a: Int, b: Int) :Int{
return a + b
}
在其他的地方如果有人見(jiàn)到這個(gè)格式也需要知道和上方的結(jié)果一致:
fun sumTow(a: Int, b: Int) = a + b
這里手幢,我們先不說(shuō)結(jié)論捷凄,繼續(xù)下一個(gè)知識(shí)點(diǎn)。
大家可以看見(jiàn)main 函數(shù)和之前的方法構(gòu)造不相同围来。那么就有人疑惑了跺涤,難道主函數(shù)和其他的函數(shù)不同嗎?
原來(lái)桶错,不是主函數(shù)和之前的函數(shù)不同,而是省略了返回值胀蛮,我們這里院刁,將返回值補(bǔ)上看一下。
原來(lái)粪狼,主函數(shù)是省略了返回值(Unit 和java 中的 void 一樣退腥,為無(wú)返回值類(lèi)型)
我們?cè)倏瓷厦妫敲次覀円矊⒎祷刂导由显匍贸鋈缦碌慕Y(jié)果
fun sumTow(a: Int, b: Int):Int = a + b
這里狡刘,我們得出結(jié)論:
方法的變形格式為:
fun 方法名稱(chēng)(參數(shù)名稱(chēng):參數(shù)類(lèi)型):返回值類(lèi)型 = 返回值結(jié)果
我們可以看見(jiàn) 如果使用等于號(hào)的時(shí)候,可以省略返回值類(lèi)型困鸥,等于號(hào)就相當(dāng)于代碼塊以及之內(nèi)的return關(guān)鍵字
變量和常量
變量: 指的是可以變化的量
常量: 指的是不可變的量
在java 中變量是如何定義的嗅蔬?
變量類(lèi)型 變量名 = 變量值;
如疾就,這個(gè)int 類(lèi)型的變量num 澜术,值為20 :
int num = 20;
那么,在kotlin 中如何使用的呢虐译?
var num = 20
這里瘪板,我們先說(shuō)一下吴趴。var 是關(guān)鍵字漆诽,代表的是申明一個(gè)變量。如果想要使用的話(huà)那么直接使用 var 參數(shù)名= 參數(shù)值就可以了锣枝。
有人問(wèn)了厢拭,var 是代表申明一個(gè)變量。但是這個(gè)變量什么類(lèi)型都可以聲明撇叁,那么如果想要申明一個(gè)int 類(lèi)型的變量呢供鸠?
我們可以這個(gè)樣子進(jìn)行申明:
var num : Int = 20
如果給這個(gè)變量賦值其他類(lèi)型的值,那么就會(huì)出現(xiàn)如下的錯(cuò)誤
這個(gè)就是變量的使用陨闹,那么我們繼續(xù)來(lái)說(shuō)常量楞捂。
在java 中薄坏,如何定義常量?給想要的值添加final 關(guān)鍵字寨闹,final 關(guān)鍵字胶坠,代表的是 public static final ,所以是這個(gè)樣子進(jìn)行定義的:
public static final String result = "常量";
那么繁堡,在kotlin 中是如何定義的沈善?
val result = "常量"
如果對(duì)于這個(gè)值進(jìn)行使用,那么會(huì)有如下的提示:
注釋
kotlin 中的注釋和Java 中的注釋一樣,分為三種: 單行注釋?zhuān)嘈凶⑨尯臀臋n注釋
// 單行注釋
/*
多行注釋
*/
/**
* 文檔注釋
*/
字符串模板
kotlin 中有一個(gè)字符串模板绳矩。
我自己認(rèn)為字符串模板有兩種樣式:
樣式1:“內(nèi)容{引入內(nèi)容}內(nèi)容”
這里介紹一下:
樣式1的內(nèi)容代表的是要輸入的內(nèi)容{}代表需要引入代碼塊翼馆,在代碼塊中設(shè)置數(shù)據(jù)
這里給大家看一些例子:
var num : Int = 20
fun print(){
//輸出數(shù)據(jù)
var prints = "請(qǐng)輸出要數(shù)據(jù)$num"
var printss = "請(qǐng)計(jì)算結(jié)果${num+num}"
}
條件表達(dá)式
在kotlin 中哨啃,如果是簡(jiǎn)單的語(yǔ)句,那么可以不添加代碼塊(也就是{})写妥。當(dāng)然拳球,這個(gè)樣子在java中不可以。比如珍特,下面的這個(gè)例子:
java:
int result(int a, int b) {
if (a > b) {
return a + b;
} else {
return a - b;
}
}
kotlin :
fun result(a: Int, b: Int) = if (a > b) a + b else a - b
這里介紹一下祝峻,kotlin中只有 if (a > b) a + b else a - b 這個(gè)是條件表達(dá)式的樣例,方法的例子只是回顧一下子扎筒,大家千萬(wàn)別將知識(shí)點(diǎn)混淆莱找。
可空值和空檢查
kotlin 中的可空值和空檢查是什么呢?我們這里需要進(jìn)行講解嗜桌。
可空值:代表的是在kotlin中值不再像java 中一樣奥溺,比如:原先有一個(gè)字符串str ,之前的時(shí)候值是“內(nèi)容”骨宠,如果不想進(jìn)行使用浮定,那么就可以將這個(gè)值設(shè)置為“null”。但是层亿,在kotlin中桦卒,對(duì)于類(lèi)型的檢查更加的嚴(yán)格,如果你定義一個(gè)字符串類(lèi)型的值匿又,如果沒(méi)有對(duì)于他添加可空值的標(biāo)識(shí)方灾,那么你在代碼中將這個(gè)值設(shè)置為"null",那么代碼就會(huì)報(bào)錯(cuò)。
比如:
但是裕偿,如果我們想要在代碼中進(jìn)行設(shè)置洞慎,那么我們就可以使用?(可空值判斷符)進(jìn)行定義嘿棘。
空檢查:代表的是kotlin為了解決java 中特別常見(jiàn)的空指針異常拢蛋,對(duì)于null(也就是空值)的一系列空安全檢查機(jī)制。
類(lèi)型檢查和自動(dòng)轉(zhuǎn)換
首先和大家介紹一個(gè)類(lèi)型Any蔫巩。Any 大家可能會(huì)想到Anything 谆棱。所以,Any 和java 中的Object 類(lèi)一樣圆仔,都是代表所有類(lèi)的基類(lèi)垃瞧。當(dāng)時(shí)Any 絕對(duì)不是java 中的Object 。
上面的Any類(lèi)型大家知道了坪郭,那么就開(kāi)始正式的類(lèi)型轉(zhuǎn)換个从。
大家可以看到歪沃,我在代碼中使用的是一個(gè)is 關(guān)鍵字嗦锐,代表的就是判斷當(dāng)前的類(lèi)型。如沪曙,any 為字符串類(lèi)型的奕污。所以就可以直接進(jìn)行自動(dòng)的轉(zhuǎn)換,使用字符串類(lèi)型的方法液走。但是碳默,如果沒(méi)有判斷類(lèi)型,那么就算是相同的代碼都不可以執(zhí)行缘眶。
for 循環(huán)
我記得在學(xué)習(xí)java 的時(shí)候嘱根,我們就是第一天搭建環(huán)境,之后就學(xué)習(xí)循環(huán)巷懈,判斷語(yǔ)法等该抒。所以,我們這里先回顧一下java 中的for循環(huán)顶燕。
// 普通 for 循環(huán)
for (int i = 0 ; i < 30;i++){
System.out.println("普通循環(huán)的內(nèi)容");
}
// 死循環(huán)
for (;;){
System.out.println("死循環(huán)的內(nèi)容");
}
這里凑保,我們看一下kotlin 的for 循環(huán)
// 普通for 循環(huán),這里的in ... until ... 代表的是從 開(kāi)始的值割岛,到結(jié)束的值愉适。會(huì)輸出 0-30,但是包含0癣漆,不包含30的結(jié)果。
for (i in 0 until 30){
print("普通for循環(huán)$i")
}
val items = listOf("apple", "banana", "kiwifruit")
// 顯示方式1: i 表示的是內(nèi)容
for (i in items){
println(i)
}
// 顯示方式2 : i 表示的是對(duì)象的下標(biāo)值
for (i in items.indices){
println(i)
}
當(dāng)然剂买,kotlin中for 循環(huán)不再死循環(huán)惠爽。
while 循環(huán) 和 do while 循環(huán)
在java 中癌蓖,有著 while 循環(huán)和 do ... while 循環(huán),在kotlin 中同樣擁有婚肆。
java :
// while 語(yǔ)句和 do ... while 語(yǔ)句的區(qū)別.while 語(yǔ)句
// 租副,如果不滿(mǎn)足就不會(huì)進(jìn)入循環(huán),但是do... while 語(yǔ)句會(huì)先執(zhí)行一次较性,然后再進(jìn)入
//所以wehile 語(yǔ)句用僧,最少不會(huì)執(zhí)行,但是do... while與語(yǔ)句赞咙,最少會(huì)執(zhí)行一次责循。
// 總結(jié): while 語(yǔ)句,先判斷在執(zhí)行攀操,do院仿。。速和。while 語(yǔ)句先執(zhí)行再判斷
// while 循環(huán),必須要設(shè)置一個(gè)知道不滿(mǎn)足的時(shí)刻歹垫,否則會(huì)出現(xiàn)死循環(huán)
int results = 20;
while (results < 100){
System.out.println("輸出語(yǔ)句" + results);
results++;
}
int resultss = 20;
// do ... while 語(yǔ)句
do {
System.out.println("輸出語(yǔ)句" +resultss );
resultss++;
}while (resultss < 100);
kotlin :
var start = 20
while (start < 200){
start++
}
var starts = 200
do {
starts--
}while (starts<20)
kotlin 中的while 和do.. while特別的類(lèi)似,這里就不再進(jìn)行介紹了颠放。
when 表達(dá)式
when 表達(dá)式和java 中的switch 語(yǔ)句特別的相似排惨,這里我們看一下。
java:
String strs = "h";
// case :表示判斷類(lèi)型的值
// break : 表示跳出判斷碰凶,如果不添加若贮,那么就會(huì)繼續(xù)執(zhí)行
// default : 標(biāo)配是上述的都不滿(mǎn)足的情況
switch (strs){
case "h":
break;
case "0":
break;
case "a":
break;
default:
}
kotlin 的when語(yǔ)句:
var strss = 1
when (strss) {
1 -> 1
2 -> 2
3 -> { 3}
4 -> { 4}
else -> { 0}
}
這里 ->表示的是要顯示的結(jié)果。
范圍
剛才在上面的時(shí)候我們看過(guò)for循環(huán)中有 for(i in 0 until 30)這個(gè)操作痒留,那么我們?cè)倏匆幌虑绰螅渌姆绞?/p>
val ints = 0..20
for ( i in ints){
println(" 當(dāng)前的數(shù)是 $i")
}
這里解釋一下。 0 .. 20 ,代表的是一個(gè)范圍 伸头。和until不同的是匾效,0..20 代表從0-20包含20。而0 until 20 代表的是從0-20不包含20恤磷。
集合的使用
這里既然說(shuō)到集合的使用面哼,那么先說(shuō)一下kotlin 中的集合。
kotlin 中集合的創(chuàng)建:
// Arraylist 的創(chuàng)建扫步,和java 中 ArrayList 一樣魔策,只不過(guò)去除了關(guān)鍵字 new
val lists = ArrayList<String>()
// 添加數(shù)據(jù)
lists.add("apple")
lists.add("banana")
// kotlin 特有的,有點(diǎn)像java 中數(shù)組的添加方式
val listss = arrayListOf<String>("蘋(píng)果","香蕉")
kotlin 中集合的遍歷:
// Arraylist 的創(chuàng)建河胎,和java 中 ArrayList 一樣闯袒,只不過(guò)去除了關(guān)鍵字 new
val lists = ArrayList<String>()
// 添加數(shù)據(jù)
lists.add("apple")
lists.add("banana")
lists.add("abcedgf")
// kotlin 特有的,有點(diǎn)像java 中數(shù)組的添加方式
val listss = arrayListOf<String>("蘋(píng)果", "香蕉")
// for 循環(huán)遍歷
for (i in lists) {
println(i)
}
// when 循環(huán)
when {
"apple" in lists -> {
}
"banana" in lists -> {
}
}
// 使用 fifter 的時(shí)候
lists.
// 進(jìn)行篩選
filter {
// 判斷內(nèi)容是否是以a字母開(kāi)頭
it.startsWith("a")
}
// 按照字母順序排列原有的字符串
.sortedBy { it }
.map {
// 將內(nèi)容轉(zhuǎn)化為大寫(xiě)
it.toUpperCase()
}
// 打印
.forEach { println(it) }
這里介紹的是三種方式: 我經(jīng)常使用的是第一種,第三種政敢,第二種就其徙。。喷户。唾那。。褪尝。算了吧闹获!
創(chuàng)建類(lèi)以及實(shí)例
大家知道,在java 中創(chuàng)建類(lèi)那么就需要使用new 關(guān)鍵字來(lái)進(jìn)行實(shí)例河哑,那么我們就來(lái)對(duì)比一下java 和 kotlin 創(chuàng)建類(lèi)的使用場(chǎng)景避诽。
java :創(chuàng)建StringBuffer 的實(shí)例
StringBuffer stringBuffer = new StringBuffer();
kotlin : 創(chuàng)建StringBuffer的實(shí)例
var sb :StringBuffer = StringBuffer()
總結(jié):這里我們創(chuàng)建實(shí)例,不需要在添加new 關(guān)鍵字灾馒。
結(jié)尾的話(huà):
這里我們先介紹一下kotlin 的基礎(chǔ)語(yǔ)法茎用。當(dāng)然了,這里的內(nèi)容來(lái)自 kotlin官網(wǎng) 睬罗,我只是把那里的內(nèi)容翻譯了一下轨功,然后加了一些自己的想法。如果大家認(rèn)為哪兒有問(wèn)題容达,請(qǐng)給我留言古涧,我一定會(huì)及時(shí)改正的。
- 文/潘曉璐 我一進(jìn)店門(mén)团滥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)脏嚷,“玉大人赁炎,你說(shuō)我怎么就攤上這事∫庀担” “怎么了泥耀?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)蛔添。 經(jīng)常有香客問(wèn)我痰催,道長(zhǎng)兜辞,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任陨囊,我火速辦了婚禮弦疮,結(jié)果婚禮上夹攒,老公的妹妹穿的比我還像新娘蜘醋。我一直安慰自己,他們只是感情好咏尝,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布压语。 她就那樣靜靜地躺著,像睡著了一般编检。 火紅的嫁衣襯著肌膚如雪胎食。 梳的紋絲不亂的頭發(fā)上,一...
- 那天允懂,我揣著相機(jī)與錄音厕怜,去河邊找鬼。 笑死蕾总,一個(gè)胖子當(dāng)著我的面吹牛粥航,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播生百,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼递雀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蚀浆?” 一聲冷哼從身側(cè)響起缀程,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎市俊,沒(méi)想到半個(gè)月后杨凑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡摆昧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年撩满,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片据忘。...
- 正文 年R本政府宣布汉规,位于F島的核電站礼殊,受9級(jí)特大地震影響驹吮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晶伦,卻給世界環(huán)境...
- 文/蒙蒙 一碟狞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧婚陪,春花似錦族沃、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至沽一,卻和暖如春盖溺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铣缠。 一陣腳步聲響...
- 正文 我出身青樓蝇庭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親歼郭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子遗契,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 文章轉(zhuǎn)載地址 http://www.reibang.com/p/c33128fb86dc文章中有些內(nèi)容是借鑒《K...
- 1.可空性 ? 可空性是Kotlin類(lèi)型系統(tǒng)中幫助你避免NullPointException異常的一個(gè)特性。 ...
- 6.1 可空性 ? 可空性是Kotlin類(lèi)型系統(tǒng)中幫助你避免NullPointException異常的一個(gè)特性...
- Kotlin概述 Kotlin是由開(kāi)發(fā)過(guò)IntelliJ IDEA病曾、Android Studio牍蜂、PyCharm等...
- 原文鏈接:https://github.com/EasyKotlin 到目前為止,我們已經(jīng)了解了Kotlin的基本...