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变量 } }