一、Scala概述
Scala是一門多範式的程式設計語言,一種類似java的程式設計語言,設計初衷是實作可伸縮的語言、并內建面向對象程式設計和函數式程式設計的各種特性。Scala把Erlang風格的基于actor的并發帶進了JVM。開發者可以利用Scala的actor模型在JVM上設計具伸縮性的并發應用程式,它會自動獲得多核心處理器帶來的優勢,而不必依照複雜的Java線程模型來編寫程式。Scala 運作在Java虛拟機上,并相容現有的Java程式。Scala 源代碼被編譯成Java位元組碼,是以它可以運作于JVM之上,并可以調用現有的Java類庫
二、Scala的安裝
Scala下載下傳位址三、Scala使用入門
1、互動式
scala> 1+3
res0: Int = 4
scala> println("Hello World")
Hello World
2、代碼方式
object Test {
def main(args: Array[String]): Unit = {
println("Hello World")
}
}
四、Scala入門
1、基本資料類型
資料類型 | 描述 |
---|---|
Byte | 8位有符号補碼整數。數值區間為 -128 到 127 |
Short | 16位有符号補碼整數。數值區間為 -32768 到 32767 |
Int | 32位有符号補碼整數。數值區間為 -2147483648 到 2147483647 |
Long | 64位有符号補碼整數。數值區間為 -9223372036854775808 到 9223372036854775807 |
Float | 32 位, IEEE 754 标準的單精度浮點數 |
Double | 64 位 IEEE 754 标準的雙精度浮點數 |
Char | 16位無符号Unicode字元, 區間值為 U+0000 到 U+FFFF |
String | 字元串 |
Boolean | true或false |
Unit | 表示無值,和其他語言中void等同。用作不傳回任何結果的方法的結果類型。Unit隻有一個執行個體值,寫成()。 |
Null | null 或空引用 |
Nothing | Nothing類型在Scala的類層級的最底端;它是任何其他類型的子類型 |
Any | Any是所有其他類的超類 |
AnyRef | AnyRef類是Scala裡所有引用類(reference class)的基類 |
上表中列出的資料類型都是對象,也就是說scala
沒有java中的原生類型
。在scala是可以對數字等基礎類型調用方法的
2、變量
變量是一種使用友善的占位符,用于引用計算機記憶體位址,變量建立後會占用一定的記憶體空間。基于變量的資料類型,作業系統會進行記憶體配置設定并且決定什麼将被儲存在保留記憶體中。是以,通過給變量配置設定不同的資料類型,你可以在這些變量中存儲整數,小數或者字母
a、變量聲明
在 Scala 中,使用關鍵詞 "var" 聲明變量,使用關鍵詞 "val" 聲明常量
# 以上定義了變量 myVar,我們可以修改它
var myVar : String = "Foo"
# 定義了常量 myVal,它是不能修改的。如果程式嘗試修改常量 myVal 的值,程式将會在編譯時報錯
val myVal : String = "Foo"
b、變量類型聲明
變量的類型在變量名之後等号之前聲明。定義變量的類型的文法格式如下
var age: Int = [Initial value]
val name: String = [Initial value]
c、變量類型引用
在 Scala 中聲明
變量和常量不一定要指明資料類型
,在沒有指明資料類型的情況下,其資料類型是通過變量或常量的初始值推斷出來的。是以,如果在沒有指明資料類型的情況下聲明變量或常量必須要給出其初始值,
否則将會報錯
var myVar = 10;
val myVal = "Hello, Scala!";
d、Scala 多個變量聲明
val a,b = 100
3、通路修飾符
Scala 通路修飾符基本和Java的一樣,分别有:private,protected,public。如果沒有指定通路修飾符,預設情況下,Scala 對象的通路級别都是 public。Scala 中的 private 限定符,比 Java 更嚴格,在嵌套類情況下,外層類甚至不能通路被嵌套類的私有成員
a、私有(private)
用 private 關鍵字修飾,帶有此标記的成員僅在包含了成員定義的類或對象内部可見,同樣的規則還适用内部類
class Outer{
class Inner{
private def f(){println("f")}
class InnerMost{
f() // 正确
}
}
(new Inner).f() //錯誤
}
(new Inner).f( ) 通路不合法是因為 f 在 Inner 中被聲明為 private,而通路不在類 Inner 之内。但在 InnerMost 裡通路 f 就沒有問題的,因為這個通路包含在 Inner 類之内。Java中允許這兩種通路,因為它允許外部類通路内部類的私有成員
b、保護(protected)
在 scala 中,對保護(Protected)成員的通路比 java 更嚴格一些。因為它隻允許保護成員在定義了該成員的的類的子類中被通路。而在java中,用protected關鍵字修飾的成員,除了定義了該成員的類的子類可以通路,同一個包裡的其他類也可以進行通路
package p{
class Super{
protected def f() {println("f")}
}
class Sub extends Super{
f()
}
class Other{
(new Super).f() //錯誤
}
}
c、公共(Public)
Scala中,如果沒有指定任何的修飾符,則預設為 public。這樣的成員在任何地方都可以被通路
class Outer {
class Inner {
def f() { println("f") }
class InnerMost {
f() // 正确
}
}
(new Inner).f() // 正确因為 f() 是 public
}