原文出处:http://blog.csdn.net/pzw_0612/article/details/48576569

-----------------------------------------------------

Scala比Java更面向对象的一个方面是Scala没有静态成员。替代品是,Scala有单例对象:singleton object。

当单例对象与某个类共享同一个名称时,他被称作是这个类的伴生对象:companion object。你必须在同一个源文件里定义类和它的伴生对象。类被称为是这个单例对象的伴生类:companion class。类和它的伴生对象可以互相访问其私有成员。

定义单例对象不是定义类型(在Scala的抽象层次上说)

类和单例对象间的一个差别是,单例对象不带参数,而类可以。因为你不能用new关键字实例化一个单例对象,你没机会传递给它参数。每个单例对象都被作为由一个静态变量指向的虚构类:synthetic class的一个实例来实现,因此它们与Java静态类有着相同的初始化语法。Scala程序特别要指出的是,单例对象会在第一次被访问的时候初始化。

Scala 的apply 有2 张形式,一种是 伴生对象的apply ,一种是 伴生类中的apply,下面展示这2中的apply的使用。

示例代码:

package day26class Apply5 {}class ApplyTest {def apply() = println("I am into class ApplyTest!!!")def haveATry: Unit = {println("have a try on apply")}
}object ApplyTest {def apply() = {println("I am into object ApplyTest!!!")}
}object Apply5 {def main(args: Array[String]): Unit = {val array = Array(1, 2, 3, 4)val a =new ApplyTest()a.haveATrya() // 这里就是 class 中 apply使用val b=ApplyTest()// 这里就是 object 中 apply使用}
}

运行结果

have a try on apply
I am into class ApplyTest!!!
I am into object ApplyTest!!!

object apply 是一种比较普遍用法。 主要用来解决复杂对象的初始化问题。同时也是单例

scala apply方法 笔记相关推荐

  1. Scala apply()方法用于创建伴生类对象

  2. Scala类的定义,主/辅构造器,以及方法中的变量定义,单例对象,伴生对象,Apply方法调用,应用程序对象

    1. 类 1.1. 类的定义 package cn.toto.scala.day2/*** 在Scala中,类并不用声明为public类型的.* Scala源文件中可以包含多个类,所有这些类都具有共有 ...

  3. scala中object和class的理解---apply方法是初始化方法

    1.class Scala的类和C#中的类有点不一样,诸如: 声明一个未用priavate修饰的字段 var age,scala编译器会字段帮我们生产一个私有字段和2个公有方法get和set ,这和C ...

  4. Scala中的apply方法

    1.apply的场景 Scala中实例化一个类,可以不用new , 其原因 其实就是 apply 方法,具体原因 后边再讲: 在上句中Scala 生成Array对象, 会自动去调用 Array 这个伴 ...

  5. Scala学习教程笔记二之函数式编程、Object对象、伴生对象、继承、Trait、

    1:Scala之函数式编程学习笔记: 1:Scala函数式编程学习:1.1:Scala定义一个简单的类,包含field以及方法,创建类的对象,并且调用其方法:class User {private v ...

  6. Scala基础知识笔记2

    1 类 1.1 定义一个简单的类 1.2 field的getter 和 setter方法 感觉成员变量定义成  var 属性名=属性值即可,  不需要定义成 val 或者 private就行, // ...

  7. 深入学习JavaScript: apply 方法 详解

    我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家 ...

  8. scala apply是什么

    apply使得创建实例时无需new.采用该机制,创建对象就等同于调用apply方法~ object Person {def apply(name: String, age: Integer, favC ...

  9. Js中apply方法详解说明

    Js apply 方法 详解 我在一开始看到JavaScript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了, ...

最新文章

  1. 0x15.基本数据结构 — 字符串 (KMP算法(含详细证明)和最小表示法)
  2. 服务器系统重装后要配置吗,服务器系统重装后要配置吗
  3. 快递物流查询接口介绍
  4. 为DataGrid创建自定义列控件(四)
  5. [转载]高质量c/c++编程指南读书笔记
  6. 3青春痘长在哪里不害怕
  7. PHP添加php-java-brideg模块(ubuntu环境)
  8. C语言实现用星号在屏幕上打印菱形
  9. java调用clang编译的so_在Linux上编译LLVM/Clang等全部源代码
  10. python 基础 5 while循环语句
  11. Caffe神经网络结构汇总
  12. 从键盘录入10个整数,统计有多少个奇数,Java基础轻松实现
  13. 用matlab做bp神经网络预测,神经网络预测matlab代码
  14. 归并排序JAVA代码详解
  15. 代理模式与委托模式的异同点
  16. MPC5748G S32_SDK_PA_RTM_3.0.0 GPIO 调试仿真设置
  17. 4.28日机器人队任务
  18. 点阵图(位图)与矢量图的区别
  19. 使用JMETER进行REST API测试
  20. 如何解决跨站脚本攻击

热门文章

  1. oracle sql server的区别,oracle与sqlserver的十大区别
  2. createsolidcaret 后 很快就不闪烁了_为什么LED灯会越用越暗?为什么会闪烁?
  3. php js 循环对象属性,js 遍历对象的属性的代码_javascript技巧
  4. NYOJ 99单词拼接(有向图的欧拉(回)路)
  5. http get post java_java发送http的get、post请求实现代码
  6. java对mysql查询_如何利用java对mysql数据库进行增删改查
  7. python gui入门的例子_Python GUI编程之Tkinter入门之道
  8. Nexus搭建Maven私有仓库
  9. Redis(三):Redis基础知识与常用命令
  10. 自建CDN Xnign产品指标