1.Scala與Java的關係java
Scala與Java的關係很是緊密,由於Scala是基於Java虛擬機,也就是JVM的一門編程語言。全部Scala的代碼,都須要通過編譯爲字節碼,而後交由Java虛擬機來運行,因此Scala和Java是能夠無縫互操做的。Scala能夠任意調用Java的代碼。編程
2.變量聲明數組
聲明val常量:能夠聲明val變量來存放表達式的計算結果。網絡
例如,val result = 1 + 1,後續這些常量是能夠繼續使用的,例如,2 * result。app
可是常量聲明後,是沒法改變它的值的,例如,result = 1,會返回error: reassignment to val的錯誤信息。編程語言
聲明var變量:若是要聲明值能夠改變的引用,可使用var變量。
例如,val myresult = 1,myresult = 2
可是在scala程序中,一般建議使用val,也就是常量,所以好比相似於spark的大型複雜系統中,須要大量的網絡傳輸數據,若是使用var,可能會擔憂值被錯誤的更改。
在Java的大型複雜系統的設計和開發中,也使用了相似的特性,咱們一般會將傳遞給其餘模塊 / 組件 / 服務的對象,設計成不可變類(Immutable Class)。在裏面也會使用java的常量定義,好比final,阻止變量的值被改變。
指定類型:不管聲明val變量,仍是聲明var變量,均可以手動指定其類型,若是不指定的話,scala會自動根據值,進行類型的推斷。
例如,val name: String = null
例如,val name: Any = "zhang3f"
聲明多個變量:能夠將多個變量放在一塊兒進行聲明。
例如,val name1, name2:String = null
例如,val num1, num2 = 100函數
3.數據類型與操做符spa
基本數據類型:Byte、Char、Short、Int、Long、Float、Double、Boolean。
乍一看與Java的基本數據類型的包裝類型相同,可是scala沒有基本數據類型與包裝類型的概念,統一都是類。scala本身會負責基本數據類型和引用類型的轉換操做。
使用以上類型,直接就能夠調用大量的函數,例如,1.toString(),1.to(10)。
類型的增強版類型:scala使用不少增強類給數據類型增長了上百種加強的功能或函數。
例如,String類經過StringOps類加強了大量的函數,"Hello".intersect(" World")。
例如,Scala還提供了RichInt、RichDouble、RichChar等類型,RichInt就提供了to函數,1.to(10),此處Int先隱式轉換爲RichInt,而後再調用其to函數
基本操做符:scala的算術操做符與java的算術操做符也沒有什麼區別,好比+、-、*、/、%等,以及&、|、^、>>、<<等。
可是,在scala中,這些操做符實際上是數據類型的函數,好比1 + 1,能夠寫作1.+(1)
例如,1.to(10),又能夠寫作1 to 10
scala中沒有提供++、--操做符,咱們只能使用+和-,好比counter = 1,counter++是錯誤的,必須寫作counter += 1.scala
4.函數調用與apply函數設計
函數調用方式:在scala中,函數調用也很簡單。
例如,import scala.math._,sqrt(2),pow(2, 4),min(3, Pi)。
不一樣的一點是,若是調用函數時,不須要傳遞參數,則scala容許調用函數時省略括號的,例如,"Hello World".distinct
apply函數 Scala中的apply函數是很是特殊的一種函數,在Scala的object中,能夠聲明apply函數。而使用「類名()」的形式,其實就是「類名.apply()」的一種縮寫。一般使用這種方式來構造類的對象,而不是使用「new 類名()」的方式。 例如,"Hello World"(6),由於在StringOps類中有def apply(n: Int): Char的函數定義,因此"Hello World"(6),其實是"Hello World".apply(6)的縮寫。 例如,Array(1, 2, 3, 4),其實是用Array object的apply()函數來建立Array類的實例,也就是一個數組。