4.6 结语
本章介绍了Scala类和对象的基础,并展示了如何编译和运行应用程序。在下一章,你将会了解到更多关于Scala基础类型和用法的内容。
[1]这里的checksum方法用到了两个位运算操作符:~是位补码(bitwise complement),&是按位与(bitwise and)。这两个操作符在5.7节均有介绍。
[2]参数采用val的原因是val更容易推敲,不需要像var那样进一步查证val是不是被重新赋值过。
[3]我们在这里用了一个缓存来展示带有字段的实例对象。类似这样的缓存是以牺牲内存换取计算时间的方式来提升性能的。通常来说,只有当你遇到缓存能解决的性能问题时才会用到这样的缓存,并且你可能会用一个弱引用的映射,如scala.collection.mutable的WeakHaskMap,以便在内存吃紧时,缓存中的条目可以被垃圾回收掉。
[4]由于new关键字仅被用于实例化类,因此这里创建的对象是ChecksumAccumulator类的实例,而不是相同名称的那个单例对象。
[5]这里的>>操作符执行的是右移位运算,我们将在5.7节介绍。
[6]合成类的名称是对象名加上一个美元符号。因此,名称为ChecksumAccumulator的单例对象的合成类名是ChecksumAccumulator$。
[7]我们将其称为参数化字段,将在10.6节介绍如何定义它。
[8]可以通过@main注解将其他名称的方法指定为主方法,这将在23.3节介绍。
[9]如果你是Java程序员,则可以把这句引入语句当作Java 5的静态引入(static import)功能。Scala与Java静态引入的区别在于,可以从任何对象引入成员,而不仅仅是从单例对象。
[10]Scala用来“解释”一个Scala源文件的实际机制是,它会先把Scala源代码编译成Java字节码,然后马上通过类加载器加载,并执行它。