首页 > 其他 > 详细

scala当中的对象

时间:2019-03-03 17:58:33      阅读:154      评论:0      收藏:0      [点我收藏+]

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调用初始化枚举中的所有可能值:

scala当中的对象

原文:https://www.cnblogs.com/starzy/p/10466539.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!