前言
本節介紹Scala 的類和對象。
環境:
windows + Scala-2.12.8
GitHub:
https://github.com/GYT0313/Scala-Learning
1. 類、字段和方法
- 定義類
- 實例化一個類
- 定義一個完整的類,包括成員、方法
文件名:ChecksumAccumulator.scala
// 計算校驗和
class ChecksumAccumulator {
private var sum = 0
def add(b: Byte): Unit = {sum += b}
def checkSum(): Int = ~(sum & 0xFF) + 1
}
2. 單例對象
單例對象的關鍵字爲 object ,與類名同名的單例對象,兩者可以互相訪問私有變量。單例對象稱爲這個類的伴生對象,這個類成爲單例對象的伴生類。單獨存在的伴生對象稱爲孤立對象。
文件名:ChecksumAccumulator.scala (與上面代碼同一個文件)
import scala.collection.mutable
object ChecksumAccumulator {
// 緩存,存儲字符串和其校驗和
private val cache = mutable.Map.empty[String, Int]
def calculate(s: String): Int = {
// 如果已存在,則返回校驗和
if (cache.contains(s))
cache(s)
else {
val acc = new ChecksumAccumulator
// 遍歷字符串,計算校驗和
for (c <- s)
acc.add(c.toByte)
val cs = acc.checkSum()
// 加入到緩存
cache += (s -> cs)
cs
}
}
}
3. Scala 應用程序
要運行一個Scala程序,必須提供一個獨立對象的名稱。這個獨立對象要包含一個main方法,該方法接收一個Array[String] 作爲參數。main方法作爲應用程序的入口。
文件:Summer.scala
import ChecksumAccumulator.calculate
object Summer {
def main(args: Array[String]) = {
for (arg <- args)
println(arg + ": " + calculate(arg))
}
}
編譯運行:博主使用的是GitBash,使用CMD一樣的效果
scalac 編譯(產生Java字節碼),scala Summer 執行(Summer 爲單例對象的名稱)。
使用scalac 編譯時間會比較成,因爲,每次編譯啓動會花時間掃描JAR文件的內容以及執行其他一些初始化工作,然後再編譯文件。
所有,scala提供了另外一個編譯命令 fsc,第一次啓動會花費時間,但它會駐留在後臺,開啓一個端口。所以,下次編譯會節省一定的時間。
編譯執行如:
關閉:fsc -shutdown