scala对象
1.单例对象
Scala没有静态方法或静态字段,但是可以用object这个语法结构来达到静态化的目的。对象定义了某个类的单个实例。//定义一个单例对象
object Accounts{
private var num = 0
def newNum() = {num += 1;num}
}
//直接通过 对象名.方法名 就可以调用对象的方法
println(Accounts.newNum)
对象的构造器在对象方法首次被调用的时候执行,如果一个对象没有被使用,则其构造器也不会被执行。
对象本质上可以拥有类的所有特性,但是不能给对象提供构造器参数。
使用对象的地方:
(1)作为存放工具函数或常量的地方;
(2)高效地共享单个不可变实例;
(3)需要单个实例来协调某个服务时。
2.伴生对象
在Java中,通常会用到既有实例方法又有静态方法的类。在scala中,可以通过类和与类同名的“伴生”对象来达到同样的目的。
class Accounts{
val id = Accounts.newNum()
private var balance = 0.0
def deposit(amount:Double) = balance + amount
//......
}
object Accounts{//伴生对象
private var num = 0
def newNum() = {num += 1;num}
}
类和它的伴生对象可以相互访问私有特性,它们必须同属于同一个源文件中。
3.apply方法
通常会定义和使用对象的apply方法,当遇到如下形式的表达式时候,apply方法就会被调用。
如:
Array对象定义了apply方法,我们就可以通过下面的表达式来创建数组而不需要new关键字。
Array("name1","name2","name3")
定义apply方法的例子:
class Accounts(val id:Int, iniNum:Double){
private val balance = iniNum
//......
}
object Accounts{//伴生对象
private var num = 0
def apply(iniNum:Double) = new Accounts(id,iniNum)
}
4.应用程序对象
每一个scala程序都必须从一个对象的main方法开始,main方法的类型为Array[String] => Unit
object HelloWorld{
def main(args:Array[String]):Unit={
// do something
}
}
当然,和java一样,在程序中可以访问传入的参数,如:args(0)
5.枚举
scala没有枚举类型,不过可以使用标准库中Enumeration助手类来产生枚举。>>>>>__以上内容摘自:《快学Scala》 [美]Cay S. Horstmann著 电子工业出版社__<<<<<