swiftma.github.io

《Java编程的逻辑》勘误

第4页,表1-1,各个类型的上限范围有误,原文中byte的上限是2^(7-1),括号是多余的,应该为2^7-1,其他类型有同样的问题,即int的上限应该是2^31-1,short的上限应该是2^15-1,long的上限应该是2^63-1。

—— 郝晓飞

第17页,do/while循环的语法最后少了一个分号,即,应为:

 do{
     代码块;   
 }while(条件语句);

—— 于乐

第35页,表2-2,十进制数11的二进制写成了1111,应为1011

—— 贾攀

第40页,中间位置,原文“…各种计算机厂商就发明了各种各种…”,其中“各种各种”应为“各种各样”

—— 贾攀

第55页,最上面的代码示例少了个public,原文为“class Point {”,应该为“public class Point {”

—— 贾攀

第63页,图3-1,右边的图,倒数第三格的地址,原文为0x1000,应该为0x100C

—— 王硕

第66页,图3-2,有个拼写错误,原文“xiaoma.nama”,应为“xiaoma.name”,另外,内存布局里laoma.children的内容为0x1000,是children数组第一个元素的起始地址,这个不准确,应该是children数组的地址,然后children数组的第一个元素设为0x1000。更新后的图见这里

—— 贾攀,刘挺

第69页,第一行的两个“Java”应该是小写“java”

—— 贾攀

第104页,sort方法中的Comparable类型写错了,应该为MyComparable

– 方健

第105页,倒数第6行,原文“IChild有IBase1和IBase2两个父类”,其中“两个父类”,应该为“两个父接口”

p114页代码清单5-6,偏后的this的i漏印了

—— 罗贤谦

第115页,倒数第四行,原文“,不过,这些变量必须被声明为final,如innerMethod直接访问了方法参数param和局部变量str。”,表述不确切,因为自Java 8开始,不再要求变量必须声明为final,只要是effectively final即事实上没有被重新赋值即可,所以该段改为“,如innerMethod直接访问了方法参数param和局部变量str,不过,在Java 8之前,这些变量必须被声明为final,Java 8不再有这个要求,但变量也不能被重新赋值,否则会有编译错误。”

第139页,表7-2,包装类Boolean的示例代码中,第一行“b1 = false;”,其中b1没有类型声明,应为“boolean b1 = false; ”

—— 傅宇新

245页的LinedHashSet应该是LinkedHashSet

265 第五行 comparable接口少了个l

第305页,grow方法的代码,三目运算符少了一个问号,原代码为

int newCapacity = oldCapacity + ((oldCapacity < 64) 

应该为:

int newCapacity = oldCapacity + ((oldCapacity < 64) ? 

—— 贾攀

第432页,倒数第二行,原文“…是否daemo线程…”,“daemo”拼写错误,应该是“daemon”

—— 金鑫

第445页,倒数第二行,原文“…类Collection中…”,Collection少了个s,应该为“…类Collections…”

—— 金鑫

476页的“如代码清单27-6所示”,应该是“如代码清单16-4所示”

499 第5行的ConcurrentSkipListMa应该是ConcurrentSkipListMap,少了个p

—— 焦阳

第514页,中间位置,有两处拼写错误,原文写的都是“corePoolSiz”,少了个字母“e”,应该为“corePoolSize”

第518页,18.2.4最后一句,原文“而非“重新发明轮子”,应自己管理和维护消费者线程及任务队列。”,意思表达反了,中间的“应”字应该去掉义,改为“而非“重新发明轮子”,自己管理和维护消费者线程及任务队列。”

528中间 ReentrantReadWriteLock的构造方法写成了ReentrantLock

—— 焦阳

第528页,中间位置“fire表示是否公平”,“fire”拼写错误,应该为“fair”,第529页,倒数第9行,有相同错误,原文“fire表示公平”,应该为“fair表示公平”

—— 金鑫

第592页,第四行,原文“,我们需要…”,应该为“,我们不需要…”

—— 杨恺

第24章592页,594页,598页,599页,多次出现“OSGI”,不太标准,其中“I”应该为小写,改为“OSGi”。592页第一次出现OSGI的全称也应该修改,原文“OSGI(Open Service Gateway Initiative)”,其中“Service”改为“Services”,“Initiative”改为小写,整体改为“OSGi(Open Services Gateway initiative)”

—— 张秀宏

第620页和621页,关于手机号码的正则表达式,最近中国的手机号码扩充了规则,第2位可以为6了,所以进行相应的修改。倒数第5行改为“,第2位取值为3到8之一”,倒数第三行的正则表达式改为:

1[3-8][0-9]{9}

第621页第1段正则表达式改为:

1[3-8][0-9]-?[0-9]{4}-?[0-9]{4}

第4段正则表达式改为:

(?<![0-9])((0|\+86|0086)\s?)?1[3-8][0-9]-?[0-9]{4}-?[0-9]{4}(?![0-9])

第5段倒数第2行改为:

+ "1[3-8][0-9]-?[0-9]{4}-?[0-9]{4}" // 186-1234-5678

第628页,中间文字“利用Lambda表达式,Java 8还增强了日期和时间API。”,这段可能有一定的误导性,因为Java 8对日期和时间的增强与Lambda表达式并没有必然联系,所以修改描述为“Java 8还增强了日期和时间API,其中也用到了Lambda表达式。”

—— 张秀宏

第631页,中间位置原文“与匿名内部类类似,Lambda表达式也可以访问定义在主体代码外部的变量,但对于局部变量,它也只能访问final类型的变量,与匿名内部类的区别是,它不要求变量声明为final,但变量事实上不能被重新赋值。”,这段话表述不确切,自Java 8开始,匿名内部类也不要求变量声明为final。所以,应去掉“与匿名内部类的区别是”,整体修改为“与匿名内部类类似,Lambda表达式也可以访问定义在主体代码外部的变量,但对于局部变量,它也只能访问final类型的变量,它不要求变量声明为final,但变量事实上不能被重新赋值。”

—— 张秀宏

欢迎反馈新问题,以下任一方式即可: