Scala學(xué)習(xí)筆記
1 val
聲明常量环凿,var
聲明變量貌踏,使用val時(shí)相當(dāng)于java的final修飾符是不可變的。
2 class
中的內(nèi)容都是非靜態(tài)的,而object
中的都是靜態(tài)的蚀之,可以靜態(tài)調(diào)用。在class
中是無(wú)法定義main
方法捷泞。
3 方法聲明采用def 方法名(參數(shù):參數(shù)類型, ...) : 返回類型 = {}
的形式:
- 多個(gè)參數(shù)使用
,
分隔足删,無(wú)參數(shù)時(shí)參數(shù)列表以及括號(hào)可以省略; - 無(wú)返回值時(shí)返回類型可以省略锁右,大括號(hào)直接跟在參數(shù)列表后失受;
- 有返回值時(shí)必須在后面加上
=
;
4 scala采用類型推斷(type inference)咏瑟,編譯器會(huì)通過(guò)上下文推斷類型信息拂到。
5 在scala中函數(shù)和方法是兩個(gè)不同的概念,函數(shù)可以作為句柄的一部分而方法不行码泞。
6 若無(wú)return
語(yǔ)句兄旬,最后一個(gè)有值的語(yǔ)句的值會(huì)作為返回值。
7 for
循環(huán)語(yǔ)句:
for(i <- 1 to 10)
for(i <- 0 util myArray.length)
for(value <- myArray)
8 擴(kuò)展類可以使用extends
關(guān)鍵字浦夷,但是一個(gè)class只能擴(kuò)展一個(gè)類辖试;
9 特征/特質(zhì)trait
辜王, 類似于java的interface劈狐,使用with
關(guān)鍵字來(lái)使用特質(zhì),一個(gè)類可以with
多個(gè)trait
呐馆,這點(diǎn)與java一致肥缔。區(qū)別在于,類可以不一定實(shí)現(xiàn)trait
汹来,但是要在類名上加上abstract
修飾符续膳。
10 extends
和with
的關(guān)系:extends
后的語(yǔ)句是一體的:
class MyClass extends AnyRef with T1 with T2 with T3
這個(gè)類聲明實(shí)際上應(yīng)該是
class MyClass extends (AnyRef with T1 with T2 with T3)
因此一個(gè)類要“使用”某個(gè)trait
,必須首先擴(kuò)展一個(gè)類收班,默認(rèn)為AnyRef
,再使用擴(kuò)展的類去間接使用trait
坟岔。
11 模式匹配,可以使用switch
摔桦,但更常用的是match
關(guān)鍵字:
x match {
case 1 => "one"
case "two" => 2
case y: Int => "Scala.Int"
case _ => "many"
}
_
表示其它值
12 異常處理社付,使用try
catch
finally
三級(jí)異常處理機(jī)制,使用throw
拋出異常:
try {
//Did something
} catch {
case e : Exception => //handle exception
} finally {
throw new RuntimeException("balabala")
}
19 類型的上下界:
-
U >: T
:下界邻耕, U必須是T的本身或者父類鸥咖; -
S <: T
:上界, S必須是T的本身或者子類兄世;
20 Unit
類型是一種值類型啼辣, 僅用來(lái)表明方法的返回類型,Unit
代表一個(gè)表達(dá)式單元御滩,可以是語(yǔ)句也可以是具體值鸥拧。