当前位置:网站首页>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方法中的代码直接写在单例对象后的花括号中即可
边栏推荐
猜你喜欢
【剑指 Offe】剑指 Offer 18. 删除链表的节点
Mongo for infrastructure
【每日一道LeetCode】——191. 位1的个数
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
Swiper rotates pictures and plays background music
微信小程序云开发 | 城市信息管理
Codeblocks + Widgets 创建窗口代码分析
What is the value of biomedical papers? How to translate the papers into Chinese and English?
vxe-table实现复选框鼠标拖动选中
LeetCode Exercise - Two Questions About Finding Sum of Array Elements
随机推荐
不同的路径依赖
DTSE Tech Talk丨第2期:1小时深度解读SaaS应用系统设计
防抖和节流有什么区别,分别用于什么场景?
【剑指 Offer】剑指 Offer 22. 链表中倒数第k个节点
原生js系列
NC | Tao Liang Group of West Lake University - TMPRSS2 "assists" virus infection and mediates the host invasion of Clostridium sothrix hemorrhagic toxin...
What is the value of biomedical papers? How to translate the papers into Chinese and English?
Common linked list problems and their Go implementation
JsonUtil基于字符串操作josn
Scrapy framework is introduced
常见链表题及其 Go 实现
Read the "Language Model" in one article
Scrapy框架介绍
LocalDate时间生成
单例模式 (Singleton)
MySQL data types
Deepen school-enterprise cooperation and build an "overpass" for the growth of technical and skilled talents
Delay queue optimization (2)
Pytorch基础--tensorboard使用(一)
沉浸式体验科大讯飞2022消博会“官方指定产品”