在scala当中,没有类似于像java当中的static修饰的静态属性或者静态方法或者静态代码块之类的,但是我们可以通过scala当中的Object来实现类似的功能。可以理解为scala当中的Object里面的属性或者方法都是静态的,可以直接调用定义一个class类,然后在class类当中定义一个Object的对象。object对象当中的所有属性或者方法都是静态的
????class Session { ??????def hello(first:Int):Int={ ????????println(first) ????????first ??????} ????} ????object SessionFactory{ ??????val session = new Session ??????def getSession():Session ={ ????????session ??????} ??????def main(args: Array[String]): Unit = { ???? ? ????????for(x <- 1 to 10){ ??????????//通过直接调用,产生的对象都是单列的 ??????????val session = SessionFactory.getSession() ??????????println(session) ????????} ??????} ????} |
? ?
举例说明:
????class ClassObject { ??????val id = 1 ??????private var name = "Tom" ??????def printName(): Unit ={ ????????//在Dog类中可以访问伴生对象Dog的私有属性 ????????println(ClassObject.CONSTANT + name ) ??????} ????} ???? ? ????object ClassObject{ ??????//伴生对象中的私有属性 ??????private val CONSTANT = "汪汪汪 : " ??????def main(args: Array[String]) { ????????val p = new ClassObject ????????//访问私有的字段name ????????p.name = "123" ????????p.printName() ??????} ????} |
? ?
举例说明:
????class ApplyObjectClass (name:String){ ??????println(name) ????} ????object ApplyObjectClass{ ?????? ? ??????def apply(name:String): ApplyObjectClass = { ????????new ApplyObjectClass(name) ??????} ??????def main(args: Array[String]): Unit = { ????????//调用的apply方法来创建对象 ????????val applyObjectClass = ApplyObjectClass("lisi") ????????//调用的是new??Class来创建对象 ????????val applyObjectClass2 =new ApplyObjectClass("wangwu") ??????} ????} |
? ?
案例说明:
????//1.在object中定义main方法 ????object Main_Demo1 { ??????def main(args: Array[String]) { ????????if(args.length > 0){ ??????????println("Hello, " + args(0)) ????????}else{ ??????????println("Hello World1!") ????????} ??????} ????} ????//2.使用继承App Trait ,将需要写在 main 方法中运行的代码 ????// 直接作为 object 的 constructor 代码即可, ????// 而且还可以使用 args 接收传入的参数。 ???? ? ????object Main_Demo2 extends App{ ??????if(args.length > 0){ ????????println("Hello, " + args(0)) ??????}else{ ????????println("Hello World2!") ??????} ? ? } |
? ?
Scala中没有枚举类型,但是我们可以退通过定义一个扩展Enumeration类的对象,并以value调用初始化枚举中的所有可能值:
原文:https://www.cnblogs.com/starzy/p/10466539.html