目录
1.什么是伴生对象和伴生类
scala 允许定义 和class结构同名的 object结构
object称之为 伴生对象
class 称之为 伴生类
当只有 object对象时,我们也称这个对象为 单例对象、孤立对象
2.怎样理解伴生对象
object相当于 在加载class之前生成的一个单例对象(内存中唯一)
所有 object 中定义的 公共属性和方法 都是`静态`方法
3.语法
object 对象名称 { 成员属性、成员方法 }
4.伴生对象的特性
4.1 伴生对象、伴生类必须定义在同一个.scala文件中
伴生对象 和 伴生类(如果定义了) 必须在一个scala源文件中
Companions 'class Person' and 'object Person' must be defined in same file:
4.2 私有属性相互使用
class Person() {
private val age: Int = 100
/* 伴生类中的无参构造 */
println("--伴生类中的无参构造--")
/* 伴生类中 可以使用 伴生对象的私有属性 */
println(s"获取私有属性-${Person.name}")
}
object Person {
val name: String = "大王"
/* 伴生对象中的无参构造 */
println("--伴生对象中的无参构造--")
/* 伴生对象中 可以使用 伴生类中的私有属性 */
private val person = new Person()
println(person.age)
}
4.3 伴生对象只会初始化一次
object Person {
val name: String = "大王"
/* 伴生对象中的无参构造 */
println("--伴生对象中的无参构造--")
/* 伴生对象中 可以使用 伴生类中的私有属性 */
private val person = new Person()
println(person.age)
}
/* 验证 伴生对象 只会初始化一次 */
object Test extends App {
println(Person.name)
println(Person.name)
println(Person.name)
}
--伴生对象中的无参构造--
大王
大王
大王
5.怎样获取伴生对象和伴生类对象
// 获取伴生类对象
new Person()
// 获取伴对象
Person
6.使用场景
工具类、单例模式、初始化基础配置内容
7.单例对象和类的区别
单例对象不能接受参数 而类可以
单例对象 在代码首次访问时才会被初始化
单例对象 是静态变量引用的合成类的实例