Scala學習筆記
1 val聲明常量,var聲明變量,使用val時相當于java的final修飾符是不可變的。
2 class中的內容都是非靜態(tài)的,而object中的都是靜態(tài)的,可以靜態(tài)調用。在class中是無法定義main方法。
3 方法聲明采用def 方法名(參數:參數類型, ...) : 返回類型 = {} 的形式:
- 多個參數使用
,分隔,無參數時參數列表以及括號可以省略; - 無返回值時返回類型可以省略,大括號直接跟在參數列表后;
- 有返回值時必須在后面加上
=;
4 scala采用類型推斷(type inference),編譯器會通過上下文推斷類型信息。
5 在scala中函數和方法是兩個不同的概念,函數可以作為句柄的一部分而方法不行。
6 若無return語句,最后一個有值的語句的值會作為返回值。
7 for循環(huán)語句:
for(i <- 1 to 10)
for(i <- 0 util myArray.length)
for(value <- myArray)
8 擴展類可以使用extends關鍵字,但是一個class只能擴展一個類;
9 特征/特質trait, 類似于java的interface,使用with關鍵字來使用特質,一個類可以with多個trait,這點與java一致。區(qū)別在于,類可以不一定實現trait,但是要在類名上加上abstract修飾符。
10 extends和with的關系:extends后的語句是一體的:
class MyClass extends AnyRef with T1 with T2 with T3
這個類聲明實際上應該是
class MyClass extends (AnyRef with T1 with T2 with T3)
因此一個類要“使用”某個trait,必須首先擴展一個類,默認為AnyRef,再使用擴展的類去間接使用trait。
11 模式匹配,可以使用switch,但更常用的是match關鍵字:
x match {
case 1 => "one"
case "two" => 2
case y: Int => "Scala.Int"
case _ => "many"
}
_表示其它值
12 異常處理,使用try catch finally三級異常處理機制,使用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類型是一種值類型, 僅用來表明方法的返回類型,Unit代表一個表達式單元,可以是語句也可以是具體值。