Head First JAVA(中文第二版)勘误记录(已完结)

不可否认这本书的确是好书(指英文原版),但本书的中文译版存在大量的错译、漏译以及简译,这导致了有些东西你看中文版的看不明白,但是一看英文版的就知道作者想表达什么意思。虽查阅了网上其他人的勘误,但是也不完全,所以决定自己整理一个勘误稿(其他人+自己的)。

因本书原版发表于2005年,所以本人因个人所求,并未阅读最后一章“远程部署的RMI”最后提及的Jini、EJB相关内容(指P631之后的内容,但P636起有一个只用到RMI的通用服务浏览器的小项目,有完整的代码,感兴趣的可以结合英文版看一看),至此勘误记录已完结。

他人整理部分:1~10,12,14,36

1.p19 编译器第2行:

错误:我不能容许变量保存类型的数据

纠正:我不能容许变量保存错误类型的数据

2.P79第6行

错误:由于Getter与Getter较为符合Java的命名习惯

纠正:由于Getter与Setter较为符合Java的命名习惯

3.P82第5行

错误:将getter与setter设定为private

纠正:将getter与setter设定为public

4.P93倒数第7行

错误:方不可以带很多个

纠正:方法可以带很多个

5.P102第4行

错误:我们真正在意的只有checkYourselft()方法

纠正:我们真正在意的只有checkYourself()方法

6.P190示图第6行

错误:这是个合法的过载但不是过载

纠正:这是个合法的重载但不是覆盖

原文:This is actually a legal overLOAD, but not an overRIDE.

7.P195最后一组连线错误

错误:连的是B's m1, C's m2, A's m3

纠正:B's m1, A's m2, C's m3, 13

8.P228第10行

错误:super这个关键词能让你在子类中调用子类

纠正:super这个关键词能让你在子类中调用父类

9.P236第7行

错误:方法调用及变量的生存空间(stack)

纠正:方法调用及变量的生存空间栈(stack)

10.P243“实例变量没有默认值”错误

错误:但这会让Duck暂时处于没有大小数值的状态(实例变量没有默认值)

纠正:Duck暂时处于没有正确大小数值的状态(int类型实例变量默认为0)

验证:P84 实例变量永远都会有默认值。

11.P247第三个箭头的批注

错误:知道是否为蘑菇,但不知道大小
纠正:知道是否有魔力,但不知道大小

12.P248问答

错误:没错。有时候...

纠正:错误。有时候...

13.P251第一段

错误:在创建新对象时,所有继承下来的构造函数都会执行。

纠正:在创建新对象时,对象继承树中的所有构造函数都必须执行。

验证:P243 构造函数不会被继承

原文:All the constructors in an object’s inheritance tree must

run when you make a new object.

14.P284第一对问答

错误:非静态方法不可以调用该类静态的方法或静态的变量

纠正:非静态方法可以调用该类静态的方法或静态的变量

15.P291数值运算

错误:这代表你可以对Integer的对象作递增运算

纠正:这代表你可以对Integer对象的引用变量作递增运算

原文:That means you can apply the increment operator against

a reference to an Integer object!

16.P295这个指令代表什么

*语病:取此方法的第二个参数以第一个参数所表示带有逗号的整数(decimal)方式表示

纠正:取此方法的第二个参数,将其格式化为整数(十进制)并插入逗号

原文:Take the second argument to this method, and format it

as a decimal integer and insert commas.

17.P305第三小段

错误:将日期转换成微秒表示法

纠正:将日期转换成毫秒表示法(下文出现的微秒同样应为毫秒)

原文:The Calendar class lets you convert your dates into and

out of a millisecond representation.

18.P314练习解答 倒数第五行

错误:day1 += (DAY_IM *29.52)

纠正:day1 += (DAY_IM *29.52);

备注:英文版就印错了,这里是必须要有分号结尾的。

19.P337声明(duck掉)

*语病:把method声明成跟有风险的调用一样会抛出相同的异常

纠正:把method所抛出的异常声明与所调用的风险method所抛出的异常声明一致

原文:Declare that your method throws the same exceptions as the risky method you’re calling.

20.P348是非题(1)错误表述

错误:try块必须要跟着catch与finally块后

纠正:try块后必须跟着catch与finally块

原文:A try block must be followed by a catch and a finally block.

21.P349排排看

错误:System.out.print(r),System.out.print(t),...,if(yes.equals(t)),...

纠正:System.out.print("r"),System.out.print("t"),...,if("yes".equals(t)),...

备注:if片段和所有包含System.out.print的片段均缺少"",共八处。

22.P396泳池迷宫题目错误表述

错误:...还会慢慢变小变白

纠正:...还会慢慢变小并最终消失在白色的区域中。

原文:...will shrink and shrink and disappear into a field of white.

23.P396泳池迷宫题目错误

错误:public void paintComponent (Graphic ___)

纠正:public void paintComponent (Graphics ___)

备注:除此之外,上面的try-catch代码块位置也应整体向右平移一格

24.P409上半页的箭头注释

原译:把按钮加到面板上面

补译:并将面板加到框架上面。面板的布局管理器(flow)管理按钮,框架的布局管理器(border)管理面板。

原文:Add the button to the panel and add the panel to the frame. The panel’s layout manager (flow) controls the button, and the frame’s layout manager (border) controls the panel.

25.P409右边面板配图的注释

原译:且宽高都跟默认值一样,因为面板使用的是顺序布局

补译:...并且按钮是面板的一部分(并不属于框架)

原文:And the button got its preferred size in both dimensions, because the panel uses flow layout, and the button is part of the panel(not the frame).

26.P416处理事件

错误:public void itemStateChanged(ItemEvent ev) {

String onOrOff = "off";

if (check.isSelected()) onOrOff = "on";

System.out.println("Check box is " + onOrOff);

}

纠正:public void itemStateChanged(ItemEvent ev) {

String onOrOff = "off";

if (check.isSelected()) {

onOrOff = "on";

System.out.println("Check box is " + onOrOff);

}

}

27.P440 倒数第三个问

错误:...但我们不是在回复对象的时候需要该变量吗?

纠正:...但我们不是在恢复对象的时候需要该变量吗?

原文:...but don’t we NEED that variable when the object is brought back to life?

28.P442序号③

错误:...则Java虚拟机会抛出例外。

纠正:...则Java虚拟机会抛出异常,解序列化失败。

原文:the JVM throws an exception and the deserialization fails.

29.P446倒数第五个要点

错误:除非该实例变量被标记为transient。否则,该变量在还原的时候会被赋予null或primitive主数据类型的默认值。

纠正:被标记为transient的实例变量,在还原的时候会被赋予null或primitive主数据类型的默认值。

验证:P443 transient变量会被赋值null的对象引用或primitive主数据类型的默认为0、false等值。

另译:如果希望序列化过程跳过该实例变量,则应将该实例变量标记为transient。标记为transient的实例变量在解序列化时会恢复为null(对于对象引用)或者默认值(对于primitive主数据类型)

原文:Mark an instance variable with the transient keyword if you want serialization to skip that variable. The variable will be restored as null (for object references) or default values (for primitives).

备注:P439中所说的transient所标记的实例变量不能被序列化,这个不能被序列化不是指这个实例变量的值不存在了,而是指该实例变量的值不会被保存下来。

30.P452右侧两幅图片之间的文字

错误:File对象代表文件名为“GameFile.txt”的文件

纠正:File对象代表文件名“GameFile.txt”

验证:P452 File对象代表特定文件的地址,但不是文件本身

原文:A File object represents the filename “GameFile.txt”

31.P467排排看

错误:...FileOutputStream( dg.ser );...FileInputStream( dg.ser );

纠正:...FileOutputStream("dg.ser");...FileInputStream("dg.ser");

32.P479最下面的图片

错误:Socket输出

纠正:Socket输出流

原文:Socket’s output stream (we don’t need to know the actual class)

33.P493 第二段末尾

错误:线程只在乎传入给Thread的构造函数的参数是否为实现Runnable的类。

纠正:线程只在乎传入给Thread的构造函数的参数是否为实现Runnable的类的对象。

原文:The thread cares only that you pass the Thread constructor an object of a class that implements Runnable.

34.P507 public void run()的注释,翻译错位问题

错误:检查账户余额,如果透支就列出信息,不然就去睡一会儿,然后醒来完成提款操作

纠正:在run()方法中,线程通过一循环并且尝试在每次迭代中完成提款,每完成一次提款就检查一次余额,以查看账户余额是否透支。

原文:In the run() method, a thread loops through and tries to make a withdrawal with each iteration. After the withdrawal, it checks the balance once again to see if the account is overdrawn.

35.P507 private void makeWithdrawal(int amount)的注释

错误:检查账户余额,如果透支就列出信息,不然就去睡一会儿,然后醒来完成提款操作

纠正:检查账户余额,如果余额不足就列出信息,不然就去睡一会儿,然后醒来完成提款操作

原文:Check the account balance, and if there’s not enough money, we just print a message. If there IS enough, we go to sleep, then wake up and complete the withdrawal, just like Ryan did.

36.P517最后一行

错误:任何同步化线程

纠正:任何同步化方法

37.P555填空题(4)(5)

错误:...必须实现Comparable吗?/...必须实现Comparator吗?

纠正:...能够实现Comparable吗?/...能够实现Comparator吗?

填空题(8)(9)另译:

myCompare所属的类必须实现什么?/myCompare所属的类必须实现什么方法

38.P561 最后一段

错误:此时不会传回例外,...

纠正:此时不会传回异常,...(注左侧override应翻译成覆盖)

39.P566大标题歧义

原译:TreeSet的元素必须是Comparable

另译:TreeSet的元素必须是有指定比较规则的

原文:TreeSet elements MUST be comparable

歧义点:原译文容易理解为TreeSet的元素的类必须要实现Comparable,但是从英文原文(原文是comparable没有大写C)和下文可得知,这并不是必须要实现Comparable,而是其中一种选择。即此处的comparable的含义应该只是单词本身,而不是指Comparable接口

40.P570 段落第二句

*语病:没问题,且Array<Animal>也可以通过取用Array<Animal>的方法

纠正:同样,一个ArrayList<Animal>可以被传递给一个接受ArrayList<Animal>参数的方法。

原文:No problem. And an ArrayList<Animal> can be passed to a method with an ArrayList<Animal> argument.

41.P589 黑底字

*语病:你必须把类放在与包层次结构相以应的目录结构下

另译:你必须将类放入与包层次结构匹配的目录结构中

原文:You must put a class into a directory structure that matches the package hierarchy.

42.P593 ②未翻译部分

原文:Extract the contents of a JAR

翻译:提取(解压)JAR的内容

43.P615 “步骤一:创建Remote接口”中的内容

错误:它是个作为服务的多态化类

纠正:它是客户端用作服务多态类类型的接口

原文:It’s what the client will use as the polymorphic class type for your service.(注:前文的主语是The remote interface,所以此处的it是指接口,所以翻译作“它是...接口”)

44.P615 “步骤二:实现Remote”中的内容

错误:它是客户端会调用的对象

纠正:它是客户端想调用其方法的对象

原文:It’s the object that the client wants to call methods on

45.P616 第一个注释的不明漏译

错误:外你自己的i接口声明出它和远程方法调用有关

纠正:你的接口必须声明它是用于远程方法调用的。一个接口不能实现(implement)任何东西,但它可以扩展(extend)其他接口

原文:Your interface has to announce that it’s for remote method calls. An interface can’t implement anything, but it can extend other interfaces

46.P616 ②中的内容

错误:它是个作为服务的多态化类

纠正:远程接口是客户端用作服务多态类型的接口

原文:The remote interface is the one the client uses as the polymorphic type for the service

错误:客户端会调用有实现此接口的stub

纠正:客户端调用实现了远程接口的对象上的方法,该对象即是stub(存根)

原文:...,the client invokes methods on something that implements the remote interface. That something is the stub,...

47.P627 未翻译的部分

原文:Override the doGet for simple HTTP GET messages.

翻译:覆盖 doGet 方法以处理简单的 HTTP GET 消息

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值