一、Scala概述
Scala是一門多范式的編程語言,一種類似java的編程語言,設(shè)計(jì)初衷是實(shí)現(xiàn)可伸縮的語言、并集成面向?qū)ο缶幊毯秃瘮?shù)式編程的各種特性。Scala把Erlang風(fēng)格的基于actor的并發(fā)帶進(jìn)了JVM。開發(fā)者可以利用Scala的actor模型在JVM上設(shè)計(jì)具伸縮性的并發(fā)應(yīng)用程序,它會自動獲得多核心處理器帶來的優(yōu)勢,而不必依照復(fù)雜的Java線程模型來編寫程序。Scala 運(yùn)行在Java虛擬機(jī)上,并兼容現(xiàn)有的Java程序。Scala 源代碼被編譯成Java字節(jié)碼,所以它可以運(yùn)行于JVM之上,并可以調(diào)用現(xiàn)有的Java類庫
二、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、基本數(shù)據(jù)類型
| 數(shù)據(jù)類型 | 描述 |
|---|---|
| Byte | 8位有符號補(bǔ)碼整數(shù)。數(shù)值區(qū)間為 -128 到 127 |
| Short | 16位有符號補(bǔ)碼整數(shù)。數(shù)值區(qū)間為 -32768 到 32767 |
| Int | 32位有符號補(bǔ)碼整數(shù)。數(shù)值區(qū)間為 -2147483648 到 2147483647 |
| Long | 64位有符號補(bǔ)碼整數(shù)。數(shù)值區(qū)間為 -9223372036854775808 到 9223372036854775807 |
| Float | 32 位, IEEE 754 標(biāo)準(zhǔn)的單精度浮點(diǎn)數(shù) |
| Double | 64 位 IEEE 754 標(biāo)準(zhǔn)的雙精度浮點(diǎn)數(shù) |
| Char | 16位無符號Unicode字符, 區(qū)間值為 U+0000 到 U+FFFF |
| String | 字符串 |
| Boolean | true或false |
| Unit | 表示無值,和其他語言中void等同。用作不返回任何結(jié)果的方法的結(jié)果類型。Unit只有一個實(shí)例值,寫成()。 |
| Null | null 或空引用 |
| Nothing | Nothing類型在Scala的類層級的最底端;它是任何其他類型的子類型 |
| Any | Any是所有其他類的超類 |
| AnyRef | AnyRef類是Scala里所有引用類(reference class)的基類 |
上表中列出的數(shù)據(jù)類型都是對象,也就是說scala沒有java中的原生類型。在scala是可以對數(shù)字等基礎(chǔ)類型調(diào)用方法的
2、變量
變量是一種使用方便的占位符,用于引用計(jì)算機(jī)內(nèi)存地址,變量創(chuàng)建后會占用一定的內(nèi)存空間?;谧兞康臄?shù)據(jù)類型,操作系統(tǒng)會進(jìn)行內(nèi)存分配并且決定什么將被儲存在保留內(nèi)存中。因此,通過給變量分配不同的數(shù)據(jù)類型,你可以在這些變量中存儲整數(shù),小數(shù)或者字母
a、變量聲明
在 Scala 中,使用關(guān)鍵詞 "var" 聲明變量,使用關(guān)鍵詞 "val" 聲明常量
# 以上定義了變量 myVar,我們可以修改它
var myVar : String = "Foo"
# 定義了常量 myVal,它是不能修改的。如果程序嘗試修改常量 myVal 的值,程序?qū)诰幾g時報(bào)錯
val myVal : String = "Foo"
b、變量類型聲明
變量的類型在變量名之后等號之前聲明。定義變量的類型的語法格式如下
var age: Int = [Initial value]
val name: String = [Initial value]
c、變量類型引用
在 Scala 中聲明變量和常量不一定要指明數(shù)據(jù)類型,在沒有指明數(shù)據(jù)類型的情況下,其數(shù)據(jù)類型是通過變量或常量的初始值推斷出來的。所以,如果在沒有指明數(shù)據(jù)類型的情況下聲明變量或常量必須要給出其初始值,
否則將會報(bào)錯
var myVar = 10;
val myVal = "Hello, Scala!";
d、Scala 多個變量聲明
val a,b = 100
3、訪問修飾符
Scala 訪問修飾符基本和Java的一樣,分別有:private,protected,public。如果沒有指定訪問修飾符,默認(rèn)情況下,Scala 對象的訪問級別都是 public。Scala 中的 private 限定符,比 Java 更嚴(yán)格,在嵌套類情況下,外層類甚至不能訪問被嵌套類的私有成員
a、私有(private)
用 private 關(guān)鍵字修飾,帶有此標(biāo)記的成員僅在包含了成員定義的類或?qū)ο髢?nèi)部可見,同樣的規(guī)則還適用內(nèi)部類
class Outer{
class Inner{
private def f(){println("f")}
class InnerMost{
f() // 正確
}
}
(new Inner).f() //錯誤
}
(new Inner).f( ) 訪問不合法是因?yàn)?f 在 Inner 中被聲明為 private,而訪問不在類 Inner 之內(nèi)。但在 InnerMost 里訪問 f 就沒有問題的,因?yàn)檫@個訪問包含在 Inner 類之內(nèi)。Java中允許這兩種訪問,因?yàn)樗试S外部類訪問內(nèi)部類的私有成員
b、保護(hù)(protected)
在 scala 中,對保護(hù)(Protected)成員的訪問比 java 更嚴(yán)格一些。因?yàn)樗辉试S保護(hù)成員在定義了該成員的的類的子類中被訪問。而在java中,用protected關(guān)鍵字修飾的成員,除了定義了該成員的類的子類可以訪問,同一個包里的其他類也可以進(jìn)行訪問
package p{
class Super{
protected def f() {println("f")}
}
class Sub extends Super{
f()
}
class Other{
(new Super).f() //錯誤
}
}
c、公共(Public)
Scala中,如果沒有指定任何的修飾符,則默認(rèn)為 public。這樣的成員在任何地方都可以被訪問
class Outer {
class Inner {
def f() { println("f") }
class InnerMost {
f() // 正確
}
}
(new Inner).f() // 正確因?yàn)?f() 是 public
}