一、单例对象
Scala没有静态方法或静态字段,可以用object来达到相同的目的
object Account{
private var num = 0
def number() ={ num += 1; num}
}
println(Account.number())
println(Account.number())
结果
在Scala中可以用对象来实现:
- 作为存放工具函数或常量的地方
- 高效的共享单个不可变实例
- 需要用单个实例来协调某个服务(单例模式)
二、伴生对象
如果用到即有实例方法又有静态方法的类,在scala中,你可以通过类和与类同名的 "伴生" 对象来达到同样的目的。
类和它的伴生对象可以互相访问私有特性。它们必须存在于同一个源文件中。
class Account{
val id = Account.number()
println(id)
}
object Account{
private var num = 0
def number() ={ num += 1; num}
}
println(Account.number())
println(Account.number())
val c = new Account()
结果
三、扩展类或特质的对象
四、apply方法
五、应用程序对象
每个scala程序必须从一个对象的main开始
object Test {
def main(args: Array[String]) {
println("Hello")
}
}
除了这种方式,也可以扩展App特质
object Test extends App{
println("Hello")
}
object Test extends App{
if(args.length>0)
println("Hello,"+args(0))
else
println("Hello World")
}
通过args获取命令行参数
$scalac Hello.scala
$scala -Dscala.time Hello Fred
Hello, Fred
[total 4ms]
指定参数scala.time,程序退出时会显示使用的时间
六、枚举
object color extends Enumeration{
//val Red,Green,Yellow = Value
val Red = Value(0,"stop") //id为0 name为stop
val Yellow = Value(10) //id为10 name为Yellow
val Green = Value("go") //id为11 name为go
}
for(i<-color.values) println(i.id+" "+i)
println(color(0))
println(color.withName("stop"))
结果
0 stop
10 Yellow
11 go
stop
stop
参考《快学Scala》