类和对象
在类定义中,有字段filed和方法method,统称为成员member,通过val和var定义字段指定对象的变量。通过def定义方法。(和Python一样)实例一个类后,会指派一些内存来保存对象的状态图。个人理解对通过地址间映射,有一块内存保存值。
对字段声明私有。在var、val前加。不加,就是共有public。
class Checksum {
private var sum = 0
}
单例对象
Scala的类不允许有静态成员static。对此类使用场景,Scala提供了单例对象。将class关键字替换成object。当单例对象和某个类共用同一个名字时,称作这个类的伴生对象。类又叫作这个单例对象的伴生类,可以互相访问对方的私有成员。可以把单例对象当作用于安置Java编写的静态方法。
应用程序
没有同名的伴生类的单例对象成为孤立对象。孤立对象的作用:将工具方法归集在一起,或定义Scala应用程序的入口。
要运行一个Scala程序,必须提供一个独立对象的名称。这个独立对象要包含main方法,该方法接收一个Array[String]作为参数,结果类型为Unit。
import ChecksumAccumulator.calculate
//calculate是单例对象ChecksumAccumulator的一个方法,不用实例,直接调用
object Summer {
def main(args : Array[String]) = {
for (arg <- args)
println(arg + ":" + calculate(arg))
}
}
Scala和Java的区别之一,Java要求你将公共的类放入跟类同名的文件中,Scala可以任意命名.scala文件。
基础类型和操作
Scala的基础类型和Java对应的类型取值区间完全相同。
整数字面量
0X十六进制,没有其他修饰就是十进制,以L结尾就是LONG型。
浮点数中,没有其他修饰就是double类型,如果以f结尾就是float类型。
字符中,字符字面量由一对单引号和中间的任意Unicode字符组成。转义字符。
val a = 'A'
val a = 'u0041'
字符串由双引号里的字符组成。可以用""" """来表示原生字符串。
整体上,和Java相似,没有什么不同。
字符串插值
val name = "reader"
println(s"Hello, $name!")
s出现在首个双引号前,Scala将使用s这个字符串插值器来处理该字面量,对内嵌的每个表达式求值,对求值结果调用toString。
共有三种字符串插值器,s、f和raw。
操作符
Int包含多个重载的+方法,分别接收不同的参数类型。
位运算操作
&按位与,|按位或,^按位异或,~位补码操作(对每一位取反)。<<左移,>>右移,>>>无符号右移。
==
Scala的==和Java不同,对于引用类型,Java的==比较的是引用相等性,即两个变量指向JVM堆上的同一个对象。