zoukankan      html  css  js  c++  java
  • 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 类型的非静态成员 b3。由输出可见,静态初始化只有在必要时刻才会进行。如果不创建 Table对象,也不引用Table.b1或 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段

    错误:你所需的只是在创建出修改它

    更正:你所需的只是在创建处修改它

  • 相关阅读:
    os模块
    sys模块
    psutil模块
    subprocess模块
    time模块
    argparse模块
    tcp端口扫描(python多线程)
    基于http的软件仓库
    SRE思想
    redis哨兵模式
  • 原文地址:https://www.cnblogs.com/Sabre/p/7639529.html
Copyright © 2011-2022 走看看