scala学习笔记——类和对象
基础语法
关于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学习笔记——类和对象的更多相关文章
- 《python基础教程(第二版)》学习笔记 类和对象(第7章)
<python基础教程(第二版)>学习笔记 类和对象(第7章) 定义类class Person: def setName(self,name): self.name=n ...
- Scala学习笔记之伴生对象
所谓伴生对象, 也是一个Scala中的单例对象, 使用object关键字修饰. 除此之外, 还有一个使用class关键字定义的同名类, 这个类和单例对象存在于同一个文件中, 这个类就叫做这个单例对象的 ...
- Java学习笔记--类和对象
1.介绍面向对象的编程 面向对象是现在主流的编程样例,它替代了以前C语言使用时的“结构体”,Java是一门面向对象的语言,所以需要熟悉面向对象的概念.面向对象的程序由很多对象组成,每 ...
- Python学习笔记——类和对象
类和对象 1. 一个例子 # 对象 = 属性 + 方法 # Python 中的类名称约定首字母大写,而 Python 函数名首字母小写 class Turtle: #属性 color = 'green ...
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- Scala学习笔记及与Java不同之处总结-从Java开发者角度
Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...
- Javascript学习6 - 类、对象、继承
原文:Javascript学习6 - 类.对象.继承 Javasciprt并不像C++一样支持真正的类,也不是用class关键字来定义类.Javascript定义类也是使用function关键字来完成 ...
- JavaScript:学习笔记(9)——Promise对象
JavaScript:学习笔记(9)——Promise对象 引入Promise Primose是异步编程的一种解决方案,比传统的解决方案回调函数和事件更加合理和强大.如下面为基于回调函数的Ajax操作 ...
- JavaScript:学习笔记(10)——XMLHttpRequest对象
JavaScript:学习笔记(10)——XMLHttpRequest对象 XHR对象 使用XMLHttpRequest (XHR)对象可以与服务器交互.您可以从URL获取数据,而无需让整个的页面刷新 ...
随机推荐
- 【Linux】 任务调度/计划 cron
实时查看日志: tail -f /var/log/cron 显示任务调度 bash#crontab -u username -l 编辑 bash#crontab -u username -e 内容: ...
- php的冒泡算法
<?php /* 冒泡算法 * @para $arr 传人进去排序的数组 * @return $newArr 排序之后的数组 */ function maopao($arr){ ...
- php javascript
php100:103:Jquery javascript javascript:网页用来改进设计.验证表单.检测浏览器.创建cookies. Javascript(简称JS) 和 HTML 标签一样都 ...
- iScroll 下拉刷新
<!doctype html> <html> <head> <meta charset="utf-8"> <script ty ...
- memcache分布式小实例
<?php /** * 分布式的 memcache set 实现 */ /** * 创建缓存实现memcache 添加分布式服务器 并设置权限 */ function createCache() ...
- memcpy造成其他变量值改变
以前C/C++遇到过很多很多的问题,有时候费了很久很久时间,很大很大的努力才解决.但是都没有记录下来,现在想想以前的遇到的问题,只知道这样的事情发生过,至于是什么问题,一点印象都没有了.所以遇 ...
- android-support-v7-appcompat下载
http://download.csdn.net/detail/u010556601/7449661 将压缩包解压,放入sdk\extras\android\support\v7目录下 在eclips ...
- New ipad install Metasploit(New ipad 安装Metasploit)
Title:New ipad install Metasploit(New ipad 安装Metasploit) --2012-09-19 11:35 越狱以后,Ssh或者终端Ipad,把屏幕锁定最好 ...
- js 比较日期大小
//1获取当前时间 var curTime = new Date(); //2把字符串格式转换为日期类 var startTime = new Date(Date.parse(kc.begintime ...
- ossim/zabbix/logstash
http://dl528888.blog.51cto.com/2382721/1639579 http://307033.blog.51cto.com/297033/473666 http://lym ...