博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类和对象之单例对象(Singleton)
阅读量:5821 次
发布时间:2019-06-18

本文共 721 字,大约阅读时间需要 2 分钟。

  hot3.png

Scala比Java更为面向对象的特点之一是scala不能定义静态成员,而是代之以定义单例对象。除了用object关键字替换了class关键字以外,单例对象的定义看上去与类定义一致。

210346_spKd_168814.jpg

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

210523_srug_168814.jpg

结果:

210804_sQpe_168814.jpg

对于Java程序员来说,可以把单例对象当作是Java中可能会用到的静态方法工具类。也可以用类似的语法做方法调用: 单例对象类 . 方法名,如上例:

Test1.show4("class")
然而单例对象不只是静态方法工具类。它同样是头等的对象
定义单例对象并没有定义类型(在scala的抽象层次上说)。如果只有Test1对象的定义,就不能建立Test1类型的变量或者可以认为,Test1类型是由单例对象的伴生类定义的

类和单例对象间的差别

单例对象不带参数,而类可以。因为单例对象不是用new关键字实例化的,所以没机会传递给它实例化参数。每个单例对象都被实现为虚构类(synthetic class)的实例,并指向静态的变量,因此它们与Java静态类(静态内部类??)有着相同的初始化语义。特别要指出的是,单例对象在第一次被访问的时候才会被初始化
注:虚构类的名字是对象名加上一个美元符号($)。因此单例对象Test1的虚构类是:Test1$。
另外,没有伴生类的单例对象被称为独立对象。它可以用在很多地方,例如作为相关功能方法的工具类,或者定义scala应用的入口点。

转载于:https://my.oschina.net/fhd/blog/273980

你可能感兴趣的文章
python matplotlib 中文显示参数设置
查看>>
【ros】Create a ROS package:package dependencies报错
查看>>
HDU1576 A/B【扩展欧几里得算法】
查看>>
通过容器编排和服务网格来改进Java微服务的可测性
查看>>
re:Invent解读:没想到你是这样的AWS
查看>>
PyTips 0x02 - Python 中的函数式编程
查看>>
阿里云安全肖力:安全基础建设是企业数字化转型的基石 ...
查看>>
使用《Deep Image Prior》来做图像复原
查看>>
Linux基础命令---rmdir
查看>>
编玩边学获数千万元A轮融资,投资方为君联资本
查看>>
蓝图(Blueprint)详解
查看>>
Spark之SQL解析(源码阅读十)
查看>>
Android图片添加水印图片并把图片保存到文件存储
查看>>
BigDecimal 舍入模式(Rounding mode)介绍
查看>>
开源 免费 java CMS - FreeCMS1.2-标签 infoSign
查看>>
开源 免费 java CMS - FreeCMS1.9 移动APP生成栏目列表数据
查看>>
虚拟机新增加硬盘,不用重启读到新加的硬盘
查看>>
Java IO流详尽解析
查看>>
邮件服务系列之四基于虚拟用户的虚拟域的邮件系统(安装courier-authlib以及部分配置方法)...
查看>>
Linux VSFTP服务器
查看>>