当前位置:网站首页>Scala学习:类和对象
Scala学习:类和对象
2022-07-30 18:45:00 【我爱夜来香A】
一、类
class ChecksumAccumulator {
private var sum = 0
def add(b:Byte):Unit = {
sum += b }
def checksum():Int = ~(sum & 0xFF) + 1
}
- Scala中类、方法、成员变量都是默认public级别,不用声明
- Scala中分号是可选的
- Scala返回值类型是可选的,如上述eg中Unit和Int可以不用声明,Scala会做类型推断
二、单例对象
package Test
import scala.collection.mutable
class ChecksumAccumulator {
private var sum = 0
def add(b:Byte):Unit = {
sum += b }
def checksum():Int = ~(sum & 0xFF) + 1
}
object ChecksumAccumulator{
private val cache = mutable.Map.empty[String,Int]
def calculate(s:String):Int = {
if (cache.contains(s))
cache(s)
else{
val acc = new ChecksumAccumulator
for (c <- s)
acc.add(c.toByte)
val cs = acc.checksum()
cache += (s -> cs)
cs
}
}
}
- Scala比Java更面向对象,其中一点就是Scala中不允许有静态成员
- 但Scala提供了另一种形式-单例对象,就是上图中的object{}部分,当单例对象和某个类共用一个名字时,它被称为这个类的伴生对象,类也被称为单例对象的伴生类。必须在同一个源码文件中定义类和类的伴生对象
- 类和伴生对象可以互相访问对方的私有成员
- 没有同名的伴生类的单例对象被称为孤立对象,通常定义main方法,作为应用程序的入口
- 此外,Java和Scala的一个重大区别是:Java要求将公共的类放入跟类同名的文件中,如若上述代码为Java代码,则文件名必须为ChecksumAccumulator.java,但Scala可以随意命名文件名,不过最好文件和类同名
三、应用程序入口
import Test.ChecksumAccumulator.calculate
object SumTest {
def main(args:Array[String]) = {
val str = "lishiming"
println(calculate(str))
}
}
- Scala同Java一样,应用程序的入口都在main方法中,scala的main方法定义在单例对象中
import Test.ChecksumAccumulator.calculate
object SumTest extends App {
val str = "lishiming"
println(calculate(str))
}
- 如上所示,scala提供了另一种应用程序的入口,不用编写main方法,只需在单例对象后extends
App,然后把打算放在main方法中的代码直接写在单例对象后的花括号中即可
边栏推荐
- 《痞子衡嵌入式半月刊》 第 59 期
- 好未来单季营收2.24亿美元:同比降84% 张邦鑫持股26.3%
- 二分答案裸题(加一点鸽巢原理)
- AI基础:图解Transformer
- A senior with 13 years of experience in software testing, summed up 5 test employment suggestions....
- CCNA-子网划分(VLSM)
- 【剑指 Offer】剑指 Offer 22. 链表中倒数第k个节点
- C# wpf borderless window add shadow effect
- Chapter 4 Controlling the Execution Flow
- [Use of Qt Designer tool]
猜你喜欢

Does the satellite phone communicate directly with the satellite or through a ground station?

ctf.show_web5

DTSE Tech Talk丨第2期:1小时深度解读SaaS应用系统设计

【PHPWord】PHPOffice 套件之PHPWord快速入门

SwiftUI iOS 精品开源项目之 完整烘焙食品菜谱App基于SQLite(教程含源码)

中集世联达飞瞳全球工业人工智能AI领军者,全球顶尖AI核心技术高泛化性高鲁棒性稀疏样本持续学习,工业级高性能成熟AI产品规模应用

ByteArrayInputStream class source code analysis

Pytorch基础--tensorboard使用(一)

开心的聚餐

The sixteenth issue of eight-part article Balabala said (MQ)
随机推荐
"Ruffian Heng Embedded Bimonthly" Issue 59
Graphic LeetCode -- 11. Containers of most water (difficulty: medium)
Scrapy framework is introduced
【网站放大镜效果】两种方式实现
CIMC Shilian Dafeitong is the global industrial artificial intelligence AI leader, the world's top AI core technology, high generalization, high robustness, sparse sample continuous learning, industri
Anaconda Navigator卡在loading applications
CCNA-网络汇总 超网(CIDR) 路由最长掩码匹配
深化校企合作 搭建技术技能人才成长“立交桥”
Multiple instances of mysql
《痞子衡嵌入式半月刊》 第 59 期
Codeblocks + Widgets create window code analysis
Critical Reviews | 南农邹建文组综述全球农田土壤抗生素与耐药基因分布
好未来单季营收2.24亿美元:同比降84% 张邦鑫持股26.3%
Does the satellite phone communicate directly with the satellite or through a ground station?
第十六期八股文巴拉巴拉说(MQ篇)
Network Basics (3) 01-Basic Concepts of Networks - Protocols, Host Addresses, Paths and Parameters of URL Addresses & 127.0.0.1 Local Loopback Address & View URL IP Address and Access Ping Space + URL
Basic use of scrapy
SwiftUI iOS 精品开源项目之 完整烘焙食品菜谱App基于SQLite(教程含源码)
The use of terminal split screen tool Terminalx
[Summary] 1396- 60+ VSCode plugins to create a useful editor