大三寒假学习 spark学习 Scala面向对编程 对象(单例对象和伴生对象)
单例对象:
- Scala采用单例对象(singleton object)来实现与Java静态成员同样的功能。
- 使用object 关键字定义单例对象。
代码示例
object person { private var lastId=0//一个人的身份编号 def newPersonId()={ lastId +=1 lastId } } printf("The first person id is %d.n" ,person.newPersonId()) printf("The second person id is %d.\n",person.newPersonId()) printf("The third person id is %d.\n",person.newPersonId())
伴生对象:
- 当一个单例对象和它的同名类一起出现时,这时的单例对象被称为这个同名类的“伴生对象” (companion object)。相应的类被称为这个单例对象的“伴生类”
- 类和它的伴生对象必须存在于同一个文件中,可以相互访问私有成员。
- 没有同名类的单例对象,被称为孤立对象(standalone object)。一般情况下,Scala程序的入口点main方法就是定义在一个孤立对象里。
class Person { private val id = Person.newPersonId()//调用了伴生对象中的方法private var name = "" def this(name: String){ this() this.name = name } def info() { printf( "The id of %s is %d.\n",name,id)} } object Person { private var lastId = 0//一个人的身份编号 private def newPersonId()={ lastId +=1 lastId } def main(args: Array[String]){ val person1 = new Person("ziyu") val person2 = new Person("Minxing") person1.info() person2.info() } }
先编译后与运行
从上面结果可以看出,伴生对象中定义的newPersonId)实际上就实现了Java中静态(static)方法的功能
Scala源代码编译后都会变成JVM字节码实际上,在编译上面的源代码文件以后在Scala里面的class和object在Java层面都会被合二为一,class里面的成员成了实例成员,object成员成了static成员)
应用程序对象:
每个scala应用程序都必须从一个对象的main方法开始