scala支持關聯映射,如能夠用(key -> value)表示一個鍵值對java
scala中的全部類型都是對象,包括基本數據類型編程
scala中的case語句用來判斷接收的消息,比java中的switch...case...更專一數組
receive{ case msg => action() }併發
scala行動類實現了線程之上的併發抽象,經過發送消息相互通訊,每一個行動類都自動維護一個消息隊列,而且實現發送消息和接收消息的基本操做。app
receriver ! msg函數式編程
scala是靜態類型的,也即在編譯以前就須要肯定參數的類型,與C++的參數化類型類似函數
scala包含兩種類型的變量,val變量至關於java中的const,var則是常規變量spa
scala中的基本數據類型,來源於Java中對相應數據類型的類封裝,String類型則相同線程
scala具備類型推斷功能,在可由上下文推斷的狀況下,能夠省略類型說明,如:val x = 4scala
scala經過def關鍵字定義函數,在缺省顯式return語句的狀況下,返回函數最後計算獲得的值
scala採用println直接輸出到標準輸出,而不用System.out.println
scala中的數組索引是args(0),而非java中的args[0]
scala數組Array包含方法foreach(action),其中action是一個傳入的函數,例如:x => println(x)
scala提供指令式:for(arg <- args) println(arg)
scala中的全部操做符都是方法的調用,例如:1+2,等效於(1).+(2)
0 to 5,等效於(0).to(5),x(1)="scala",等效於(x).update(1,"scala"),x(1)等效於(x).apply(1)
scala經過定義伴生對象,分離靜態成員,相似於java中的static關鍵字
scala Array數組中全部對象都具備相同類型,實例化後數組長度不能再改變,可是數組元素值能夠改變
List數組中的元素值則不可改變,List有"::"實現疊加功能,操做符會建立一個新的List,List不支持append操做
scala包含新的容器對象Tuple,元組能夠包含多個不一樣類型的對象,例如:val tp = (1,2,"scala"),中tp就是一個Tuple[Int,Int,String]對象,tp._1表示取第一個元素
scala中Set和Map類型有可變和不可變兩種實現方式,分別保存在不一樣的包中
scala沒有"++"操做符
scala提供trait關鍵字,描述對象的特質,相似於java中的接口interface
scala提倡函數式編程風格,減小var變量的使用,這樣能夠獲得簡潔可讀性更強的代碼
scala從文件中讀取數據,Source.fromFile("filename").getLines()返回一個Iterator[String]對象
scala中的"=="操做符比較的是值的相等性,提供函數eq、ne比較引用的相等性
每一個類都繼承自Any,scala中「==」和equals相同,能夠經過重寫equals方法改變「==」的意義。類Any有兩個子類,AnyVal和AnyRef。AnyVal是scala中內建值類的父類,Byte、Short、Char、Int、Long、Float、Double、Boolean、Unit,前面8個和java中的基本類型相對應。Unit大約至關於Java的Void類型,只有一個實例,寫成()。在java平臺上,AnyRef實際上就是java.lang.Object的別名。
scala類和java類的不一樣還在於其繼承了一個名爲ScalaObject的記號特質,目前爲止ScalaObject只包含一個方法名爲$tag,在內部使用以加速模式匹配。
Null類是null引用對象的類型,它是每一個引用類的子類,Null不兼容值類型,不能把null賦給整數變量。Nothing類型在scala類層級的最底端,它是任何其餘類型的子類型,然而根本沒有這個類型的任何值,Nothing的一個用處是標明程序的不正常終止。