一、 Objectjava
二、伴生對象app
三、讓object繼承抽象類工具
四、apply方法spa
五、main方法命令行
六、用object實現枚舉功能scala
Object,至關於class的單個實例,一般在裏面放一些靜態field或者method。3d
第一次調用object方法時,會執行object的constructor,也就是object內不在method中的代碼,可是object不能定義接受參數的constructor。對象
Object的constructor只會在其第一次被調用時執行一次,之後再次調用就不會再次執行constructor了。blog
一般object用於單利模式的實現,或者放class的靜態成員,好比工具方法。繼承
若是有一個class,還有一個與class同名的object,那麼就成這個object是class的伴生對象,class是object的伴生類。
伴生類和伴生對象必須存放在一個.scala文件中。
伴生類和半生對象,最大的特色就在於,互相能夠訪問private field。
Object功能其實和class相似,除了不能接受定義接受參數的constructor以外,object也能夠繼承抽象類,並覆蓋抽象類中的方法。
Object中很是重要的一個特殊方法,就是apply方法。一般在伴生對象中實現apply方法,並在其中實現構造伴生類的對象的功能。而建立伴生類的對象時,一般不會使用new Class 的方式,而是使用Class()的方式,隱式調用伴生對象的apply方法,讓對象建立更加簡潔。
和java同樣,若是運行一個程序,必須編寫一個包含main方法類同樣,scala中若是運行一個應用程序,也必須有一個main方法,做爲入口。
Scala中main方法定義爲def main(args:Array[String]),並且必須定義在object中。
新建一個文件HelloWorld.scala,寫入如下內容:
object HelloWorld{
def main(args:Array[String]){
println("Hello World!!!")
}
}
編譯scalac HelloWorld.scala
運行 scala HelloWorld
顯示運行花費的時間 scala –Dscala.time HelloWorld
除本身實現main方法外,還能夠繼承App Trait,而後將須要在main方法中運行的代碼,直接做爲object的constructor代碼,並且用args能夠接受傳入的參數。
object HelloWorld extends App{
if(args.length>0) println("hello, " + args(0))
else println("Hello World!!!")
}
編譯 scalac HelloWorld.scala
運行 scala HelloWorld scala HelloWorld LiLei
App Trait工做原理:App Trait繼承自DelayedInt Trait,Scala命令行進行編譯時,會把繼承App Trait的object的constructor代碼都放到DelayedInt Trait的delayedInit方法中執行。
Scala沒有直接提供相似java的Enum這樣的枚舉特性,若是要實現枚舉,則須要用object繼承Enumeration類,而且調用Value方法來初始化枚舉值。
能夠經過value傳入枚舉值得id和name,經過id和toString能夠獲取,還能夠經過Id和name來查找枚舉值。