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当中的对象的更多相关文章

  1. 聊聊 Scala 的伴生对象及其意义

    2019-04-22 关键字:Scala 伴生对象的作用 关于 Scala 伴生对象,比教材更详细的解释. 什么是伴生对象? 教材中关于伴生对象的解释是:实现类似 Java 中那种既有实例成员又有静态 ...

  2. scala当中的类型参数

    类型参数主要就是研究scala当中的类或者scala当中的方法的泛型 1.scala当中的类的泛型         object Demo8 {          def main(args: Arr ...

  3. scala当中的类

    1.类的定义与创建 创建一个scala class来定义我们的一个类.类当中可以定义各种属性或者方法,或者函数都可以     class Person {       //定义一个属性,叫做name的 ...

  4. Scala 深入浅出实战经典 第64讲:Scala中隐式对象代码实战详解

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  5. Scala单例对象、伴生对象实战详解

    1.Scala单例对象 Scala单例对象是十分重要的,没有像在Java一样,有静态类.静态成员.静态方法,但是Scala提供了object对象,这个object对象类似于Java的静态类,它的成员. ...

  6. Spark记录-Scala类和对象

    本章将介绍如何在Scala编程中使用类和对象.类是对象的蓝图(或叫模板).定义一个类后,可以使用关键字new来创建一个类的对象. 通过对象可以使用定义的类的所有功能. 下面的图通过一个包含成员变量(n ...

  7. Scala单例对象和伴生对象

    1.Scala单例对象 Scala单例对象是十分重要的,没有像在Java一样,有静态类.静态成员.静态方法,但是Scala提供了object对象,这个object对象类似于Java的静态类,它的成员. ...

  8. scala当中的文件操作和网络请求

    1.读取文件当中每一行的数据 def main(args: Array[String]): Unit = { //注意文件的编码格式,如果编码格式不对,那么读取报错 val file: Buffere ...

  9. Scala实战高手****第9课:Scala类和对象彻底实战和Spark源码鉴赏

    scala类和对象 RDD中创建_sc和deps相比java更加的简洁. 在Spark的例如SparkContext.sqlSpark等全局成员在完成实例化. 在唯一实例的时候一般不会去使用伴生对象a ...

随机推荐

  1. 腾讯云技术专家卢萌凯手把手教你Demo一个人脸识别程序!

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文来自腾讯云技术沙龙,本次沙龙主题为Serverless架构开发与SCF部署实践 卢萌凯:毕业于东南大学,曾就职于华为,熟悉云行业解决方案 ...

  2. [PY3]——Python的函数

    Python函数总结图 1.调用 1.1 如何调用 1.1.1  函数名(传参) # 函数使用函数名来调用,函数名后紧跟一对小括号,小括号里传入函数定义时要求的参数 add(9,9) #9+9=18 ...

  3. hadoop学习笔记(一):hadoop生态系统及简介

    一.hadoop1.x的生态系统 HBase:实时分布式数据库 相当于关系型数据库,数据放在文件中,文件就放在HDFS中.因此HBase是基于HDFS的关系型数据库.实时性:延迟非常低,实时性高. 举 ...

  4. C# 中的隐式类型转换(运算时的隐式转换)和显示类型转换

    区别: 隐式转换失败编译会报错. 显示转换有可能精度丢失. 根据项目的编译设置,显示转换溢出可能会报错,如果设置溢出且未使用checked检查,运行时如果发生溢出会产出未知的计算结果. 在数字运算时, ...

  5. vertical-align属性baseline(转)

    图7-34 文字和图片内容默认垂直对齐方式为基线对齐 上一小节讲解了行高与单行纯文字的垂直居中,而如果行内含有图片和文字,在浏览器内浏览时,读者可以发现文字和图片在垂直方向并不是沿中线居中,而是沿基线 ...

  6. JSON 解析的可抛弃

    先看例子, json文件中有些元素不是我们想要的,在反序列化时可以当它们不存在,下面例子抛弃了 aaa.ccc这两节. package main import (     "encoding ...

  7. MSSQL中的表变量

    最近在看<Microsoft SQL Server2005技术内幕:T-SQL程序设计> 1.表变量的事务上下文中提到,表变量不受外部事务回滚影响. 举个例子: DECLARE  @TA ...

  8. html打造动画【系列4】哆啦A梦

    我相信每个人的童年都有一个哆啦a梦,一个小小的肚皮里装满了不可思议的哆啦a梦,一个在你无助伤心的时候陪在你身边的哆啦a梦,一个陪你胡思乱想陪你吃铜锣烧的哆啦a梦~今天我们就来画一个我们心中的哆啦a梦吧 ...

  9. 【python基础】之str类字符串

    str类字符串是不可变对象 1.创建字符串 s1 = str() #创建一个空字符串 s2 = str("hello") #创建字符串"hello" 2.处理字 ...

  10. Python爬虫教程-04-response简介

    Spider-04-response简介 本小节介绍urlopen的返回对象,和简单调试方法 案例v3 研究request的返回值,输出返回值类型,打印内容 geturl:返回请求对象的url inf ...