×

消息

EU e-Privacy Directive

This website uses cookies to manage authentication, navigation, and other functions. By using our website, you agree that we can place these types of cookies on your device.

View e-Privacy Directive Documents

You have declined cookies. This decision can be reversed.

好艰深的一节,看了两三遍才完全吃透。

覆盖clone方法要谨慎

Java中一个广为人知的复制对象的方法是clone。这个方法看上去方便好用,但实际上问题和限制都很多,所以不推荐使用。需要复制对象的情况下,应该尽可能使用复制构造函数或静态factory方法。

clone方法最大的问题来自于它的实现机制:Cloneable接口。这个接口严重破坏了Java语言中接口的使用规范,所以被称为"extralinguistic"。通常情况下,一个接口需要声明一些方法,而实现接口的类必须覆盖这些方法以提供具体行为。这样的覆盖是强制性的,否则会产生编译错误。但Cloneable接口是一个特例,它没有声明任何方法,实际上是一个空接口,因而实现它的类不会被强制覆盖clone方法。此接口的唯一作用,是作为一个"开关",用来开放Object类中的clone方法。

任何情况下toString方法都应该被覆盖

java.lang.Object已经提供了一个默认的toString方法,它的返回值,是"[类名]@[对象的hash]",比如:"PhoneNumber@163b91"。这样的信息,显然不太有用。所以语言规范中建议开发者在所有Object的子类中都覆盖toString方法,以返回明确易读的关于对象的信息。

在覆盖toString方法时,应该返回关于对象的所有有用信息。如果对象中信息量巨大,那么应该返回一个概要。比如上面电话号码的例子,可以返回类似于"(707) 867-5309"的结果;而对于"曼哈顿黄页"这样的对象,可以返回"Manhattan white pages (1487536 listings)",而不是把所有的listing都列出来。

关于返回值的格式,可以在注释中以规范的形式公布,并且提供一个factory或者构造函数,让开发者可以方便地在对象和它的字符串表示之间转换。这样做的坏处是,一旦规范公布,并且类型被大量使用,之后就很难对其进行修改,因为那将破坏用户端代码。不管toString格式是否提供规范,都应该在注释中说明,比如下面是为item 9中PhoneNumber类定义的toString方法:

很惨的听力:29/40,6.5

错题:1,6,7,9,11,25,31,32,35,36,37

1,6,7,9都错得冤枉:1完全听出来1.4 litres,但看到题目开头那个见鬼的instruction,说最多两个单词,或者一个数字,丫1.4 litres是算两个单词还是一个数字?6,7,9全是同一个错误,拼写正确,没首字母大写;11把E错选为B,现在也不太明白,貌似五个选项都有提及,但肯定有猫腻藏在连接词里,需要精听;剩下六题都是结结实实没听出来,是需要提高水平的地方了。

阅读:36/40,A类8.0

错题:11,18,36,37

听力:34/40,7.5

错题:6,13,16,18,32,33

6,13,16,18都是没跟上局部加快的语速,是水平问题,需要精力更加集中,听清每个细节。32和33比较冤枉,算是疏忽,应在真实考试中避免的:32听出了沙漠,却多写个s,给写成了甜点;33则是听出了science,进到脑子里却变成了scientist,结果整句语意狗屁不通。

阅读:35/40,A类8.0

错题:1,10,15,18,35

耗时分别为:17分钟,17分钟和20分钟

如果equals方法被覆盖,hashCode方法也必须被覆盖

Java语言规范中为Object.hashCode方法制定了须遵守的合约:

1.在程序的同一次运行(execution)中,给定某个对象,如果此对象用于计算equals返回值的信息没有改变,那么多次执行其hashCode方法,都必须返回同样的哈希值。当然,不同的运行之间,哈希值可以不同。

2.如果两个对象,依据equals方法的判定,是相等的,那么他们的哈希值必须相同。

3.如果两个对象,依据equals方法的判定,是不相等的,那么他们的哈希值不一定不等。如果此情况下可以保证两哈希值不等,那么所有依赖哈希值的数据结构(HashMap,HashSet和Hashtable)的性能将被优化。

如果上述合约被破坏,在依赖哈希值的数据结构中,程序的行为将会出错。

听力:33/40,7.5

错题:1,3,26,27,29,30,36

第1题是马虎了,听出minibus,但没看整句,缺了介词by。第3题有些溜号,两个日期没搞清楚。26,27,29,30那一段完全没跟上节奏,听了第二遍才有些眉目。36没听出来,而且那一段节奏也没掌握好。

阅读:33/40,是A类,所以也是7.5

错题:3,5,9,15,26,31,38

第9页 共19页