1O'ReillyJava系列书籍建议阅读顺序LearningJavatheO'Reilly'sWay(PartI)Java技术可以说是越来越重要了,不但可以用在计算机上,甚至连电视等家电用品,行动电话、个人数字助理(PDA)等电子产品,以及智能卡都可以透过Java的技术来为人们创造更便利的生活。许多人因此对Java感兴趣,想好好学习Java。因为讲授Java课程的关系,这几年来,不少人问我:怎样才能学好Java,我给他们的建议很简单——『多读Java的好书,可以有系统又轻易地获得许多高手的经验』。其实,我说的也是我自己的经验。『那么,要看什么书呢?』我知道你会这么问。毕竟书店里Java的书琳琅满目、怎样从其中选出一本最适合自己的好书,绝对不是一件容易的事。在建议您看什么Java书籍之前,让我先为大家做一些简单的分析比较。我认为,Java原文书可以概略地分成两种:「主题广泛」型:这类的书经常上千页,厚厚的一本,里面什么主题都有。「主题专一」型:这类的书通常薄薄的一本,少于五百页,内容只专注在某特定主题。「主题广泛」型的书,优点是可以让你一次学会很多名词和大概的观念,可是什么都只是浅谈即止,不够深入。不都说「样样通、样样松」么!还真是有道理。「主题专一」型的书就不一样了,内容只设定在一个主题,此主题不相关的内容一概不谈(或者只是概略地一提)。这两类的书各有优缺点,选择哪一种端看您的需求而定。不过,我自己偏好「主题专一」的书,原因是这类的书有下面的好处:内容深入:你真的相信「21Days」就可以学通Java?(我还看过一本书更夸张的,书名上有耸动的「24Hours」字样。)如果这样的话,Java大师就满街跑了。多读一些深入的内容,你才有可能超越别人。你可能认为:『我不过是刚入门的初学者,需要知道Java广泛的知识,而非深入的知识,所以看「主题广泛」型的Java书有何不可?』唔!话说得没错,但我认为这些简介性的知识在许多地方都可轻易取得(特别是在),实在不需要去买一本一千多页的原文书来K,现在的原文书也挺贵的,钱可要花在刀口上。主题属性适合:如果只想学Java的网络设计,你当然不会去买一本大堆头的书,其中涉及网络的部分只有区区50页,看完之后依旧懵懵懂懂。你应该去买一本500页,由浅而深,内容完全涵盖所有Java网络相关议题的书,看完这样的书,你差不多也可以算是Java网络专家了。有了「主题专一」的书,你就可以不必去买一本95%的内容对你没帮助的书。你可以想学什么,就挑什么。新版本推出较快:Java逐年在改版,书的内容也会跟着翻新,通常「主题专一」型的书比较能快速且完整地反应技术的改变。2许多出版社都有主题专一的Java系列,但其中规划最完整、内容最受肯定的就非O'Reilly的「TheJavaSeries」莫属了(可能和他们请了一个优秀的Java编辑有关)。你可以到国外许多线上买书的网站上看看大家对于O'Reilly「TheJavaSeries」的评价,就会知道我所言不假。目前,O'ReillyJava系列的书共有约二十(还在增加当中),我差不多全买齐了,虽然花了不少钱,但是值得。如果你认真的想学习Java,我向您推荐O'Reilly的「TheJavaSeries」。套句傅培梅的广告词「教人Java三四年,这是我用过最理想的书」。在后续的文章,我将陆续为大家介绍O'ReillyJava系列的每一本书。3LearningJavatheO'Reilly'sWay(PartII)JavainaNutshellADesktopQuickReferenceO'Reilly的「inaNutshell」系列书籍向来以简洁、不拖泥带水著称,常常一两页的内容可以抵得过其它书籍十多页的篇幅,在计算机书籍内容灌水风气盛行的今天,O'Reilly的「inaNutshell」系列可以算是个异数。「inaNutshell」系列的每本书虽然薄,但该说的内容一件不少。除了简洁之外,「inaNutshell」还有一个特色,就是同时具备入门学习和参考查阅的双重功效。书的内容包含两部分,前面的部分是深入浅出的入门教学,后面的部分是参考资料。《JavainaNutshell》第一版是O'Reilly「inaNutshell」系列的第一本,目前本书最新的版本是第二版。《JavainaNutshell》第二版厚度约共六百页,前面的223页是入门教学,后面的部分是参考手册。如果,你能把本书前面薄薄的223页读懂,你的Java内功就会十分扎实。C/C++和Java在语言上有许多相似性,所以C/C++的程序员想跨入Java的领域比其它语言的使用者占了许多便宜。让我打个比方:C/C++的程序员只消翻过一道矮墙就可以从C/C++的王国进入Java的领域。对于已经熟悉C/C++的程序员来说,他们最希望能有Java书籍直接告诉他们C/C++和Java之间大大小小的差异,来让他们快速地将他们所惯用的C/C++思维转成Java的思考方式,《JavainaNutshell》正是这样的一本书。虽然后来有不少书籍也定位成C/C++的程序员快速学习Java的书,但都没有《JavainaNutshell》写得精彩完整而小巧。在写Java程序的过程中,免不了要查一些资料,特别是API的用法,这时候,你会发现《JavainaNutshell》后半部三百多页的参考资料超乎想象地好用,在良好的编排以及索引的引导之下,你可以轻松地查到你需要的资料。本书后半部的参考资料部分有两种查阅方式,方法一是透过package找class,再透过class找method或field,这部分的参考资料在第十七章到第三十二章,通常使用这种方法的人对于他所欲查询的API已经有了大概的预期;方法二是完全没有概念时,直接透过第三十三章的字母排列方式找到他所欲查的资料,之后再透过方法一来找到详细的说明。以前,《JavainaNutshell》一书是许多人写Java程序时必备的速查手册,但现在因为许多Java开发工具都提供了方便的线上辅助工具,比方说:BorlandJBuilder可以透过sensitivehelp(也就是F1按键)来找到你感兴趣的API、或透过CodeInside之类的神奇功能来提示你某API的用法、或透过线上文件(支持hyper-link)来交互查阅,所以现在《JavainaNutshell》的参考手册的地位已经不再像以前那般地重要了。本书在Java书籍中已经建立了权威的地位,一提起Java的好书,大家第一本想到的4就是本书,在Java书籍泛滥的今天,要写出一本这样令大家共同推崇的书实在不容易,而这也是我对本书作者DavidFlanagan至感钦佩的地方。有读者说:『Flanagan唯一的缺点是---写的书还不够多』。这真是对一个作家最极至的赞美。为了达到精简的目的,内容就必须有所取舍,不能大小通吃。比方说,本书就只包含coreAPI,对于standardextensionAPI(也就是javaxpackage)则完全略去,而coreAPI中也有少数的package被舍弃在外(作者打算另外写一本《JavaEnterpriseinaNutshell》来容纳部分本书未包含的内容)。同样为了精简的目的,本书相当缺乏完整的程序范例,作者另外写了一本《JavaExamplesinaNutshell》来弥补这项不足。《JavaExamplesinaNutshell》的程序范例之多,媲美TheWaiteGroup出版的《JavaHow-to》。我在后续的文章会介绍到《JavaExamplesinaNutshell》。评书的好坏时,不宜讨论到书的价钱,但我实在忍不住要说:这本书的定价实在便宜得夸张,只需美金19.95。如果你常买信息类原文书的话,你会发现大部分的书都是30到60美金,而且在这些高价位的书籍当中不乏烂书,这更衬托出《JavainaNutshell》这本书实在「俗搁大碗」。其实,《JavainaNutshell》就算卖三四倍的价钱我还是会乖乖掏出钱来买的。尽管这是一本好书,不过我还是要提醒各位读者,如果你没有C/C++的背景,就想透过本书来学习Java的话,恐怕你会铩羽而归。在本系列后续的文章中,我会介绍一本不要求读者具备C/C++背景的Java入门书。5LearningJavatheO'Reilly'sWay(PartIII)JavaExamplesinaNutshell许多程序设计初学者常有的困扰是:即使查到API的用法,也不知道怎么样将这些API兜在一起写出想要的程序。其实,个别的API作用有限,如何将数个API结合起来解决问题才是学习程序设计的重点。对于许多人来说,有一本范例丰富的书可以观摩学习,这比什么都来得重要,也因此,以范例为导向的书向来颇受好评。《JavaExamplesInaNutshell》正是这样的一本书。隔了整整三年,《JavaExamplesinaNutshell》一书终于推出第二版。新版本涵盖JDK1.3,比起前一个版本多出近六十个主题,共有约一百六十个主题。依据属性,本书内容分成三部份,分别是「PartI:CoreJavaAPIs」、「PartII:GraphicsandGUIs」、「PartIII:EnterpriseJava」,这三部份刚好涵盖了「Java基础」、「JFC」、以及「EnterpriseJava」三大领域,所以此书可以视为《JavainaNutshell》、《JavaFoundationClassesinaNutshell》以及《JavaEnterpriseinaNutshell》的范例教学版本。此版本和前一版比较大的差异是:大幅改写安全和加密的部分,因为Java在此领域有了不小的变动。新增对GUI的基本介绍。绘图的部分以Java2D为主轴全部改写。新增打印的部分新增「datatransfer」的部分(包括copy-paste以及drag-and-drop)新增Servlet和JSP新增XML的部分(包括SAX、DOM、JAXP、JDOM)旧章节的重新安排和改写,以及新章节的加入,使得本书比起第一版更有条理,适合一章一章地循序阅读。除了一般的索引之外,本书第二十章还特别编排了「范例索引」,可用来快速地查阅到需要的范例。本书章标题条列如下:PART1:CoreJavaAPIsChapter1.JavaBasicsChapter2.Objects,Classes,andInterfacesChapter3.Input/OutputChapter4.ThreadsChapter5.NetworkingChapter6.SecurityandCryptographyChapter7.Internationalization6Chapter8.ReflectionChapter9.ObjectSerializationPART2:GraphicsandGUIsChapter10.GraphicalUserInterfacesChapter11.GraphicsChapter12.PrintingChapter13.DataTransferChapter14.JavaBeansChapter15.AppletsPART3:EnterpriseJavaChapter16.RemoteMethodInvocationChapter17.DatabaseAccesswithSQLChapter18.ServletsandJSPChapter19.XMLChapter20.ExampleIndex「PartI」对于Java语言基础与重要的API有很精简的介绍。如果你具有丰富的程序经验,你甚至不需要会Java语言,就可以直接透过PartI的范例来学会Java。「PartII」对于GUI程序设计的介绍很精简。本书对Java2D的介绍或许对许多读者来说已经够用,但是本书对Swing的介绍绝对不够,毕竟Swing是个超级大的主题。「Par