A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© Yeauty 中级黑马   /  2016-11-6 17:21  /  846 人查看  /  1 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

我能从书本中获得一些关于Java的好建议么?

Java相关的书籍有很多,大概可以分为三个等级:

糟糕的。大部分Java书籍都是由那些找不到Java相关工作的人写出来的(因为编程几乎总是比出书更挣钱;我都干过,所以我敢这么说)。这种书漏洞百出,会有不好的建议以及糟糕的程序。这些书对于初学者来说很危险,但是对其它语言稍有经验的编程人员是可以很容易认出并拒绝的。

非常好的。Java类的好书数量并不多。我更偏向于官方说明文档和Arnlod和Gosling、Marty Hall及Peter van der Linden这些作者写的书。作为参考,我喜欢Java in a Nutshell系列书籍,以及Sun的在线参考(我将javadoc API和语言规范以及它们的变更都拷到了本地硬盘中。此外我将它们添加到了我浏览器的书签里,这样我总是可以快速访问它们了。)

不确定的。在上述两种极端之间存在着一些中等质量的书籍,一般这些书是由不够了解Java的人写出来的。他们要么没花时间研究Java究竟是如何工作的,或者是想快速出版太过仓促。举一个例子,来自Rise and Resurrection of the American Programmer的 Edward Yourdon的Java and the new Internet programming paradigm一书。下面是Yourdon眼中与众不同的Java:

  • “函数被废止了”Java中并没有“function”这种字眼,所以这么说并没有错。Java称之为method (Perl称之为subroutines, Scheme称之为procedure, 但你并不能说这些语言中没有函数)。你尽可以说Java中没有全局函数,但我认为这样说更精确:Java中全局作用域的函数是存在的,只不过它们必须被定义到一个类里,并且称之为“静态方法C.f”而不是“函数f”。

  • 自动数据类型转换被废止了。虽然强制两类转换是有限制的,但是远不到被废止那个份上。你仍然可以写(1.0 + 2),2会自动被转换成double类型。或者你也可以直接写(“one” + 2)2会自动转为string。

  • 指针和指针相关操作被废止了。显示的对指针进行操作被废止了是没错的(可算解脱了)。但是指针还是被保留下来了;事实上,每一个对象的引用都是指针。(这就是为什么我们会遇到NullPointerExceptioin。)对于一个有竞争力的Java程序员来讲,这应该是必须知道的内容。每个Java程序员都应该知道,当你这样做的时候:


int[] a = {0, 1, 2};
int[] b = a;
b[0] = 99;

那a[0]也会变成99,因为a和b都是同一个对象的指针(或引用)。

  • “因为结构体不存在了,并且数组和字符串都以对象的方式表示,所以对于指针的需求也大大降低了”。这句话也是有误导性的,首先,结构体并没有消失,只不过被叫做“类”了。不复存在的是程序员失去了对结构体/类分配在堆或栈中的选择权。在Java中,所有对象都被分配到堆中,这就是为什么指针不需要语法标记符(如*)——在Java中,如果它是一个对象的引用,那它就是指针。Yourdon提到,在C和汇编语言中,字符串或是数组中使用指针是一种好的习惯用法(有人也在C++中这样做),这种说法并没有错,但是其它语言并没有打算这样做,也并不支持。

  • Yourdon也犯了一些小错误,比如数组的length()方法(而不是length 字段),以及可修改的字符串用StingClass表示(而不是StringBuffer)。这些东西很烦人,但是倒没有犯那种低级错误致命。


1 个回复

倒序浏览
赞一个。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马