1. Scala中的object
object相当于class中的单个实例 ,通常存放一些一些静态field或者method;在Scala中没有静态方法和静态字段,但是可以使用object这个语法结构来达到同样的目的。 Scala中object的作用:
存放工具方法和常量 高效共享单个不可变的实例 单例模式
代码如下
import scala. collection. mutable. ArrayBuffer
class Session { }
object SessionFactory{
val session = new Session
def getSession ( ) : Session = {
session
}
}
object SingletonDemo{
def main ( args: Array[ String] ) {
val session1 = SessionFactory. getSession ( )
println ( session1)
val session2 = SessionFactory. session
println ( session2)
}
}
2. Scala中的伴生对象
如果有一个class文件,还有一个与class同名的object文件,那么就称这个object是class的伴生对象,class是object的伴生类; 伴生类和伴生对象必须存放在同一个**.sclala**文件中; 伴生类和伴生对象的最大特点是,可以互相访问; 代码如下
class Dog {
val id = 1
private var name = "itcast"
def printName ( ) : Unit = {
println ( Dog. CONSTANT+ name)
}
}
object Dog{
private val CONSTANT = "汪汪汪:"
def main ( args: Array[ String] ) {
val p = new Dog
p. name = "123"
p. printName ( )
}
}
3. Scala中的apply方法
object中非常重要的一个特殊方法,就是apply方法 apply方法通常是在伴生对象中实现的,其目的是,通过伴生类的构造函数功能,来实现伴生对象的构造函数功能; 通常我们会在类的伴生对象中定义apply方法,当遇到**类名(参数1,参数2,…参数n)**时,apply方法会被调用; 在创建伴生对象或者伴生类的对象时,通常不会使用new class的方式,而是直接使用class() ,隐式的调用半生队形的apply方法,这样会让对象创建的更加简洁; 比方说Array的伴生类对象,就实现了apply()方法,apply()方法内部其实是调用了Array的构造函数,val array = new Array[T](xs.length) 代码如下
object ApplyDemo{
def main ( args: Array[ String] ) {
val arr1 = Array ( 5 )
var arr2 = new Array ( 5 )
println ( arr1. toBuffer)
}
}
4. Scala中的main方法
同Java一样,如果要运行一个程序,必须要编写一个包含main方法的类; 在Scala中,也必须要有一个main方法作为入口; Scala中的main方法定义为def main(args:Array[String]) ,而且必须定义在object 中; 除了自己实现main方法职位,还可以基础App Trait,然后,将需要写在main方法中的运行代码,直接作为object的constructor代码即可,而且还可以使用args接收传入的参数; 代码如下
object Main_Demo1 {
def main ( args: Array[ String] ) {
if ( args. length > 0 ) {
println ( "Hello, " + args ( 0 ) )
} else {
println ( "Hello World!" )
}
}
}
object Main_Demo2 extends App {
if ( args. length > 0 ) {
println ( "Hello, " + args ( 0 ) )
} else {
println ( "Hello World!" )
}