scala当中的对象
1、scala当中的Object
在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) } } } |
2、伴生类与伴生对象
- 如果有一个class文件,还有一个与class同名的object文件,那么就称这个object是class的伴生对象,class是object的伴生类;
- 伴生类和伴生对象必须存放在一个.scala文件中;
- 伴生类和伴生对象的最大特点是,可以相互访问;
举例说明:
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() } } |
3、scala当中的apply方法
- object 中非常重要的一个特殊方法,就是apply方法;
- apply方法通常是在伴生对象中实现的,其目的是,通过伴生类的构造函数功能,来实现伴生对象的构造函数功能;
- 通常我们会在类的伴生对象中定义apply方法,当遇到类名(参数1,...参数n)时apply方法会被调用;
- 在创建伴生对象或伴生类的对象时,通常不会使用new class/class() 的方式,而是直接使用 class(),隐式的调用伴生对象的 apply 方法,这样会让对象创建的更加简洁;
举例说明:
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") } } |
4、scala当中的main方法
- 同Java一样,如果要运行一个程序,必须要编写一个包含 main 方法的类;
- 在 Scala 中,也必须要有一个 main 方法,作为入口;
- Scala 中的 main 方法定义为 def main(args: Array[String]),而且必须定义在 object 中;
- 除了自己实现 main 方法之外,还可以继承 App Trait,然后,将需要写在 main 方法中运行的代码,直接作为 object 的 constructor 代码即可,而且还可以使用 args 接收传入的参数;
案例说明:
//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!") } } |
5、枚举
Scala中没有枚举类型,但是我们可以退通过定义一个扩展Enumeration类的对象,并以value调用初始化枚举中的所有可能值:
最新文章
- Go语言实战 - revel框架教程之CSRF(跨站请求伪造)保护
- Duilib源码分析(四)绘制管理器—CPaintManagerUI
- import com.sun.image.codec.jpeg.JPEGCodec不通过 找不到包(转载)
- SpringMVC 参数传递
- spark1.3.1安装和集群的搭建
- strdup函数的使用方法
- keil mdk中如何确保某一段程序不被优化掉(转)
- RedHat6.2 x86手动配置LNMP环境
- 配置SSH隧道访问Ubuntu服务器上的MongoDB
- node 在控制台打印有色彩的输出
- idea的一些好用的第三方插件
- μC/OS-II 要点分析 ------ PendSV_Handler
- Python学习第三篇——访问列表部分元素
- vue自学入门-1(Windows下搭建vue环境)
- 在vue项目中,通过v-for循环,动态添加后台返回的事件
- Android几行代码实现监听微信聊天
- 机器学习--boosting家族之XGBoost算法
- OGG 跳过事务(转)
- React Native性能优化之可取消的异步操作
- Maven配置默认使用的JDK版本