關(guān)于方法和函數(shù)的區(qū)別(其實一直不清楚):面向過程的獨立的叫函數(shù) ?面向?qū)ο蟮念愔卸x的叫做方法
方法和對象相關(guān)鼻由;
函數(shù)和對象無關(guān)。
Java中只有方法厚棵,C中只有函數(shù)蕉世,而C++里取決于是否在類中
原則?
kotlin是強類型語言 ?1.要么指定變量類型 2要么指定變量值(編譯器根據(jù)值來自動進(jìn)行類型設(shè)置)
不需要new 關(guān)鍵字 ?
不需要結(jié)束符號 ?;
?不需要指定類型 var k =3(隱式指定類型)
不支持8進(jìn)制
基本數(shù)據(jù)類型(Kotlin 本質(zhì)上不存在基本數(shù)據(jù)類型婆硬,他只存在引用數(shù)據(jù)類型狠轻,類似java中的包裝類)
1.變量聲明 ? 關(guān)鍵詞 var
顯示指定類型
var ?i :Int =0
var ?變量名 ?: 類型 ? = ? 初始化值
看起來比 java的 ?int k =0; ?還要復(fù)雜
其實可以不聲明變量類型 ?比如?
var i =0
var w =“sdfsdf”
隱式指定類型 這樣才有優(yōu)勢
var i =0
i="12312" ?(這是錯誤的彬犯,i的類型為 Int 不能賦值為String)
2. val 常量聲明(類似java 中的final)
val ?i :Int =9?
fun doFun{
? ? val k :Int ?
}
局部變量中這樣聲明常量是允許的 ? ? 但在使用前要進(jìn)行初始化向楼,同時一旦初始化 該值就不可改變
細(xì)節(jié): kotlin中的 聲明的變量不允許賦值為null 或者不賦值 必須進(jìn)行初始化?
var i :String ? = null (編譯器會報錯)
var i :String (同樣會報錯)
要想賦值為null 必須要在 基本類型后面加 ?
var i :String ? ?=null (正確方式)
區(qū)別在哪里:
var i :Int =5?
var k : Int = 5
i===k ? ? ------------------->true
var i : Int? = 5
var k : Int? =5
i===k ? ?--------------------->false
當(dāng)沒有谐区?修飾時湖蜕,i與k 對應(yīng) java 中的 int 基本數(shù)據(jù)類型,
當(dāng)有宋列?修飾時昭抒,i與k不在對應(yīng)java中的int類型,而是 Integer 類型,已經(jīng)是對象而不是int
細(xì)節(jié) kotlin 中 Char 不能直接轉(zhuǎn)換為Int 同理Int 也不能直接轉(zhuǎn)換為Char
var charN :Char =‘a(chǎn)’
var intN : Int = charN(這是錯誤的灭返,無法通過) 反之亦然
3.基本類型轉(zhuǎn)換
var ? k:Int = 10
var ?kStr:String =k.toString()
細(xì)節(jié)?kotlin 只支持顯示類型轉(zhuǎn)化 ?不支持隱式
var bookPrice : Byte = 80
var bookIntPrice : Int = bookPrice (錯誤盗迟,無法編譯通過)
var bookIntPrice:Int = bookPric.toInt() (正確)
但是 ?var bookAllPrice = bookPrice+bookIntPrice (是正確)
kotlin在表達(dá)式中可以自動轉(zhuǎn)換,這種轉(zhuǎn)換是基于上下文推斷出來的
兩個char 類型無法進(jìn)行相加 ?但可以進(jìn)行相減 比如 char -char ?返回一個Int 類型的值
Char + Int(char-Int) 值 返回 Char類型的值
細(xì)節(jié)?
----> 安全調(diào)用 ? 婆殿?.
kotlin ? ?user?.dog?.name?
user?首先判斷 user是否為空 ? ?
如果不為空 ?user?.dog? ? ?判斷user屬性dog是否為空
如果dog罩扇?不為空 ?獲取dog 的name屬性
此工程中 user 或 dog 為空 ?整個值為null
----> let全局函數(shù)調(diào)用
var strNull :String
strNull?.let{ ? .... ? }
如果strNull 不為空 直接調(diào)用 let{ }中的代碼
----> if else null判斷替代品 ? ?:
var b : String?= "fikit"
var w = ? b?.length ??: ?-1
如果 ? ??: ?左邊為null 返回右邊的值
如果 ? ??: ?左邊不為null返回左邊的值?
---->強制調(diào)用 ?!!.
var b : String 婆芦?=null
var length = b!!.length (可以強行通過編譯)
3.字符串 轉(zhuǎn)化為其他基本類型
字符串模板 ${ } ?
kotlin支持字符串模板 ?${ } ?
var ?book = 89?
var s ="圖書價格是:${book}"
String contains 支持正則表達(dá)式
var str = "java123"
str.contains(Regex("\\d{3}"))
4.類型別名
typealias 類型別名=已有類型
typealias NodeSet = Set<Network.Node>
var set :NodeSet