概述
scala语言中是没有static关键字的,也就是说不能将类的方法或者字段声明为static,那如何实现相同的功能呢。scala提供了object关键字来实现同样的功能。
单例对象
java中static关键字表明类只有这一个对象(即单例对象),scala是通过object关键字来定义,我们定义如下;
object Accounts {
private var curAmountNum = 0
def getUniqNum() = {
curAmountNum += 1
curAmountNum
}
}
一些注意说明如下:
1. 构造时机:
object关键字定义的“对象”并不会在一开始被构造,而是在第一次使用时被构造,比如调用了Accounts.getUnuqNum()时候。
2. object和类拥有很多同样的特性,例外的是:不能提供构造器参数。
object对象常见使用场景:
- 存放一些工具函数或者常量
- 共享不可变实例
- 单例模式的一种实现
伴生对象
在java中,我们大部分需要的是静态对象和非静态对象结合的类,在scala中,是通过object定义和class类同名的object对象“伴生”达到同样目的。
class Accounts(var balance : Double = 0.0) {
val id = Accounts.getUniqNum()
def addBalance(amount : Double) : Unit = {balance += amount}
}