原文出處:http://blog.csdn.net/pzw_0612/article/details/48576569
-----------------------------------------------------
Scala比Java更面向對象的一個方面是Scala沒有靜態成員。替代品是,Scala有單例對象:singleton object。
當單例對象與某個類共享同一個名稱時,他被稱作是這個類的伴生對象:companion object。你必須在同一個源文件里定義類和它的伴生對象。類被稱為是這個單例對象的伴生類:companion class。類和它的伴生對象可以互相訪問其私有成員。
定義單例對象不是定義類型(在Scala的抽象層次上說)
類和單例對象間的一個差別是,單例對象不帶參數,而類可以。因為你不能用new關鍵字實例化一個單例對象,你沒機會傳遞給它參數。每個單例對象都被作為由一個靜態變量指向的虛構類:synthetic class的一個實例來實現,因此它們與Java靜態類有著相同的初始化語法。Scala程序特別要指出的是,單例對象會在第一次被訪問的時候初始化。
Scala 的apply 有2 張形式,一種是 伴生對象的apply ,一種是 伴生類中的apply,下面展示這2中的apply的使用。
示例代碼:
package day26class Apply5 {}class ApplyTest {def apply() = println("I am into class ApplyTest!!!")def haveATry: Unit = {println("have a try on apply")}
}object ApplyTest {def apply() = {println("I am into object ApplyTest!!!")}
}object Apply5 {def main(args: Array[String]): Unit = {val array = Array(1, 2, 3, 4)val a =new ApplyTest()a.haveATrya() // 這里就是 class 中 apply使用val b=ApplyTest()// 這里就是 object 中 apply使用}
}
have a try on apply
I am into class ApplyTest!!!
I am into object ApplyTest!!!
object apply 是一種比較普遍用法。 主要用來解決復雜對象的初始化問題。同時也是單例