Java编程思想第四版勘误
坊间传说这本书翻译得很烂,我倒觉得还好。虽然看原文更准确,但是如果在具备一定编程思维和基础、能够看出来疑问的情况下,还是看中文更快一些,而且这本书本身也不适合初学者看。当然,错误和不通顺还是有的,而且官方和网上居然没有一份公开的勘误表,至少我没有搜到,搜索“Java编程思想第四版勘误”时出现的都是CSDN上的一篇久远的帖子。也许发现问题的人已经懂了,不在意那些错误。
在此记录我发现的问题以及翻译得不够好的地方,如果有人能够看到此文,且发现各种问题,欢迎补充。开源的工具就应当一切周边都开源。
1.P49,第一行:
错误:1.39e-43f
更正:1.39e-43f,即:作为自然对数的基数使用,那么在Java中看到像1.39e-43f这样的表达式时,请转换您的思维,它真正的含义是 1.39×10-43
2.P66,4.3.2 第二段,即从“初始化”开始的那段,第二行:
错误:“若获得的结果是false”
说明:说的是for循环的执行条件,原文并没有提到true或false。原文:This loop performs initialization before the first iteration. Then it performs conditional testing and, at the end of each iteration, some form of “stepping.”
更正:改为true或把此句删除。
3.P69,第二段,最后一句:
错误:也许应该使用仿真器来做评价,它是一种可以度量代码性能的工具。
说明:还仔细想了一下什么是“仿真器”,看了下原文才知道是斜体的Profiler,指的是专有名词。Profiler确实是一种可以度量代码性能的工具,此书错在不应该翻译专有名词,就像不应该把Windows翻译成视窗一样。此处可以看出来译者确实不懂技术。网上搜了一下译者“陈昊鹏”,除了与这本书同时出现以外,就是“有多少与陈昊鹏同名的人”,没有其它有价值的信息,也就是说译者并非一个IT界的人士,至少他没有博客和其它方面的知名度。
更正:直接使用Profiler。
4.p96 第一段和第二段
错误:
共有5处错误,如下红字。
Bowl 类使你得以看到类的创建, 而 Table 类和 Cupboard 类在它们的类定义中加入了Bowl类型的静态成员。 注意, 在静态数据成员定义之前,Cupboard 类先定义了一个 Bowl 类型的非静态成员 或 Table.b2, 那么静态的 Bowl b1和 b2 永远都不会被创建。 只有在第一个 Table对象被创建(或者第一次访问静态数据)的时候,它们才会被初始化。此后,静态对象不会再次被初始化。
说明:网上有一版勘误的文档说第三版就是错的,这倒也不对。因为第三版中前面的变量定义时就定义为b1、b2、b3,此处属于第四版的前面修改成一个有意义的名称之后,后面的说明文字中没有随之修改】
更正:b1、b2、b3修改为bowl1、bowl2、bowl3。
5.P105,练习19上面那句话
错误:你应该总是只在重载方法的一个版本上使用可变参数列表,或者压根就不是用它。
说明:这句没有错,也能看懂,只是不通顺。另外,此书的翻译大量使用了“压根”这个词,不算错,但它太地方化和口语化,不是书面语。比较合适的词是“根本”。
原文:You should generally only use a variable argument list on one version of an overloaded method. Or consider not doing it at all.
更正:去掉“是”,或者这样改一下“一般来讲,你应该只在一个重载版本上使用可变参数列表,或者根本不用它”。
6.P126,第一段
错误:而且当编译器需要一个String而你却只有一个对象时
原文:and it’s called in special situations when the compiler wants a String but it has an object。
说明:这句翻译得不太容易理解,“我”有一个对象和编译器有什么关系?可以看到,原文说的是“but it has an object”,是“它”有一个对象。也就是说,编译器发现本来应当是个字符串的变量,实际上是个对象,那么就会默认调用对象的toString()把它转化为String。
更正:而且当编译器需要一个String而它只有对象(类实例)时。
7.P127,中文第一段
错误:如果没有在定义处初始化,那么除非发生了不可避免的运行期异常,否则将不能保证信息在发送给对象引用之前已经被初始化。
说明:这句话看了好几遍,没看懂。看原文,如下:
原文:When you don’t initialize at the point of definition, there’s still no guarantee that you’ll perform any initialization before you send a message to an object reference—except for the inevitable run-time exception.
更正:当你没有在定义时初始化,那么不能保证在发送消息给对象之前被进行任何初始化,但是可以保证的是,你会得到一个运行时异常。
这里译者给直译了,此处真的是需要了解才能译。
8.P163,代码后的第一段,以Glyph.draw()开头。
Glyph.draw( ) is designed to be overridden, which happens in RoundGlyph. But the Glyph constructor calls this method, and the call ends up in RoundGlyph.draw( ), which would seem to be the intent. But if you look at the output, you can see that when Glyph’s constructor calls draw( ), the value of radius isn’t even the default initial value 1. It’s 0.
This would probably result in either a dot or nothing at all being drawn on the screen, and you’d be left staring, trying to figure out why the program won’t work.
Glyph.draw( )的设计用意是被子类RoundGlyph覆盖。但是,Glyph构造器却调用了这个方法【指的是Glyph.draw( )】,并且,这个调用是在RoundGlyph.draw( )之后结束的,这似乎是我们的意图。但是,你看一下输出,你可以看到当Glyph的构造器调用draw()以后,radius不是默认的1,而是0。这个结果在屏幕上可能只是一个点或什么都没有,然后你瞪大了眼睛【感到非常诧异,表震惊,而不是译文中所说的表示毫无办法的“干瞪眼”】,【迷茫地去】尝试找到为什么程序不工作。
9.P172,“但是”段。
错误:来实现某种类似多重继变种的特性
更正:来实现某种类似变种的“多重继承”的特性
10.P176,下数第一段。
错误:但是,如果Processor是一个接口,那么这些限制就会变得轻松,使得你可以复用结构该接口的Apply.process()。
说明:不通,看不懂。
原文:If Processor is an interface, however, the constraints are loosened enough that you can reuse an Apply.process( ) that takes that interface.
更正:然而,如果Processor是个接口,这使限制就会降低,你就可以复用使用了这个接口的Apply.process()。
11.P193,下数第一段
翻译偏差:这是因为内部类对象会暗暗地连接到创建它的外部类对象上
原文:This is because the object of the inner class is quietly connected to the object of the outer class that it was made from.
更正:这是因为内部类对象会隐式连接到创建它的外部类对象上
说明:“暗暗地”这个词不能算错,相对比较口语和不专业。前面某处还有一个,不找了。
12.P208,下数第二段,最后一句
错误:foreach语法用来连续获联List中的Event
更正:foreach语法用来连续获取List中的Event
13.P217,第一段
错误:不受检查的异常
更正:未检查或不翻译,直接用unchecked
14.p219,11.2第5段
错误:你所需的只是在创建出修改它
更正:你所需的只是在创建处修改它
Java编程思想第四版勘误的更多相关文章
- java编程思想第四版中net.mindview.util包下载,及源码简单导入使用
在java编程思想第四版中需要使用net.mindview.util包,大家可以直接到http://www.mindviewinc.com/TIJ4/CodeInstructions.html 去下载 ...
- 《Java编程思想第四版》附录 B 对比 C++和 Java
<Java编程思想第四版完整中文高清版.pdf>-笔记 附录 B 对比 C++和 Java “作为一名 C++程序员,我们早已掌握了面向对象程序设计的基本概念,而且 Java 的语法无疑是 ...
- Java编程思想第四版完整中文高清版.pdf
Java编程思想第四版完整中文高清版.pdf 链接: https://pan.baidu.com/s/1vV5BHF3L-bnaG6WGurdJ_A 提取码: vigy 复制这段内容后打开百度网盘手机 ...
- 《Java编程思想第四版完整中文高清版.pdf》-笔记
D.2.1 安插自己的测试代码 插入下述“显式”计时代码,对程序进行评测: long start = System.currentTimeMillis(); // 要计时的运算代码放在这儿 long ...
- 《Java编程思想第四版》附录 C Java 编程规则
附录 C Java 编程规则 本附录包含了大量有用的建议,帮助大家进行低级程序设计,并提供了代码编写的一般性指导: (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符 ...
- java编程思想第四版第九章总结
1. 策略设计模式 参考这篇文章:http://blog.csdn.net/chenjie19891104/article/details/6396458 讲的很清楚,策略设计模式.并且举了一个例子, ...
- java编程思想第四版第十一章习题
第一题 package net.mindview.holding.test1; import java.util.ArrayList; import java.util.List; /** * 沙鼠 ...
- java编程思想第四版第九章习题
第三题 package net.mindview.interfaces; abstract class Base{ public Base(){ print(); } abstract void pr ...
- Java编程思想第四版*第七章*个人练习
欢迎加群:239063848 成团的笔记:该组仅用于技术共享和交流,问题和答案公布 潘基聊天.禁止广告.禁止招聘-- 练习1:(2)创建一个简单的类.第二个类中,将一个引用定义为第一个类的对象.运用惰 ...
随机推荐
- (转)x264参数中文详解(X264 Settings)
0 解释x264命令可选项的用途和使用方法.同执行 x264 --fullhelp 显示顺序.本文主要翻译:mewiki.project357.com/wiki/X264_Settings,同时参考d ...
- (转)ALSA配置文件(alsa.conf, asoundrc, asound.conf)及其自动加载 And HDMI Adiuo
原文出处:http://blog.sina.com.cn/s/blog_a04184c101010kry.html 警告:错误的EDID会造成HDMI发声异常 #title:box:HDMI Audi ...
- ubuntu环境JDK安装(转至 http://hi.baidu.com/leo_lovato/item/31d1150d31a06d8002ce1bec)
ubuntu安装jdk 1.首先去官网http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载最新版的jdk.我下载了 ...
- vncserver的安装和使用
环境:RedHat Linux 6企业版.Xwindows:gnome (红帽默认安装的图形界面) 尽管我们可以使用SSH连接远程通过字符界面来操作Linux,但是对于更多熟悉图形人来说是很不方便的, ...
- Sqrt算法
转自原文:http://www.cnblogs.com/pkuoliver/archive/2010/10/06/sotry-about-sqrt.html 一个Sqrt函数引发的血案 2010-10 ...
- oracle用sql 语句如何向表中插入时间?
有关日期的操作中,更多的是涉及系统当前时间,用sysdate表示即可,如果是插入其他非系统时间的日期类型数据的话,用to_date转换再插入就可以了.例: insert into 表(c_date) ...
- Unity3D协程
协程介绍 Unity的协程系统是基于C#的一个简单而强大的接口 ,IEnumerator,它允许你为自己的集合类型编写枚举器.这一点你不必关注太多,我们直接进入一个简单的例子来看看协程到底能干什么.首 ...
- 理解BSTR数据类型 神奇的BSTR
理解BSTR数据类型 神奇的BSTR - 深蓝的日志 - 网易博客 http://blog.163.com/pugood@126/blog/static/13441759320091111115264 ...
- mysqldump如何针对某些数据库进行备份?针对某个数据库进行备份?
需求描述: 通过mysqldump工具对mysql服务器中的某几个数据库进行备份. 或者就对其中的一个数据库进行备份. 操作过程: 1.通过--databases参数后面加上数据库的名字进行备份 [m ...
- linux,crontab定时任务中为脚本指定使用参数,crontab的脚本中是否可以带参数
需求描述: 今天在写脚本的时候,脚本的运行需要给出几个参数,那么就考虑 在crontab写定时任务的时候,是否也是能够在脚本中,增加参数呢, 因为以前没有这么用过,所以呢,就进行一次测试. 测试过程: ...