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(){