首页>参考读物>计算机科学与技术>软件与程序设计

Java编程指南
作者 : [美] 布迪·克尼亚万(Budi Kurniawan)著
译者 : 闫斌 贺莲 译
出版日期 : 2015-06-08
ISBN : 978-7-111-50381-1
定价 : 99.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 558
开本 : 16
原书名 : Java 7:A Comprehensive Tutorial
原出版社: Brainy Software
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

图书特色

全球知名Java技术专家撰写,是系统学习Java语言编程的必读之作
全面解读面向对象编程、Java语言语法和Java核心库,重点阐述Java开发的重要编程概念和关键技术,包含大量可操作性极强的案例

封底
这本书涵盖Java开发者需要掌握的最重要的主题:面向对象编程、Java语言语法和Java库。书中详细讨论了Java编程主题中最精华的部分,并提供大量的实例和丰富的练习,为系统学习Java程序开发提供全面参考。通过充分理解所有章节的内容并完成练习题,你将能够很好地完成中级Java程序员的日常工作。

本书主要内容:
Java语言和常见的Java语句、对象和类
OOP的三个原则
Java核心类
错误处理
接口和抽象类
Java的重要特性——泛型
如何用java.io的流类型执行输入/输出
Swing知识
Applet生命周期、安全性、限制和JApplet
JDK中的注解
简化多线程编程的接口和类
Servlet和Servlet API
Android编程


作者简介
布迪·克尼亚万
(Budi Kurniawan)?
全球知名Java技术专家和资深Java企业级应用架构师,是软件咨询和技术出版公司Brainy Software的创始人。他还是一位经验丰富的技术作家,撰写了深入揭示Tomcat工作原理和设计理念的名著《How Tomcat Works》(《深入剖析Tomcat》)和《Struts Design and Programming》,并在多种权威出版物上发表过100多篇文章。他目前居住在加拿大的蒙特利尔。

译者简介
闫 斌
曾在华为技术有限公司、北京歌华有线电视网络股份有限公司等单位从事通信技术工作,目前供职于湖北省广播电视信息网络武汉有限公司。

贺 莲
武汉大学计算机学院教师,主要从事网络资源与服务、移动学习、计算机体系结构、网格与服务计算、组播与覆盖网等方面的科研与教学工作。目前研究方向主要为电子学习关键技术理论与整体系统研发及应用、语义网技术、知识图谱等。

图书前言

本书包含了在自学其他技术前必须掌握的最重要的Java编程主题。通过充分理解所有章节的内容并完成练习题,你将能很好地完成中级Java程序员的日常工作。
本书提出了专业Java程序员必须精通的三个主题:
作为编程语言的Java
使用Java进行面向对象编程(Object-Oriented Programming,OOP)
Java核心库
编排有效的Java课程难度非常大,原因在于这三个主题是互相依赖的。一方面,Java是一种OOP语言,因此,如果你已经对OOP有所了解,那么学习它的语法就更为容易了。另一方面,如果配以实例,诸如继承、多态性和数据封装这样的OOP特性是最好教授的。遗憾的是,要理解实际的Java程序需要具备Java核心库的知识。
基于这样的互相依赖性,三个主题并没有归到三个单独的部分,而是把讨论一个主题和讲述另一个主题的章节交织在一起的。例如,在讲解多态性之前本书会举一些实际的例子确保你已经熟悉某些Java类。此外,像泛型这样的语言特性,如果没有对某些类的理解作为基础是很难讲解明白的,因此把这部分内容放在支持类的讨论之后。
还有一个主题在两个或者更多地方出现的情况。例如,for语句是一个基本的语言特性,应该在前面的章节进行讨论。但是for也可以用来遍历对象集,而对象集应该是只有在讲过集合框架之后才能明白的特性。因此,for语句首先会在第3章中出现,然后在第11章中会再次出现。
Java,语言和技术
Java不仅是一门面向对象的编程语言,而且是使软件开发更快速以及开发出的应用程序更稳定、更安全的一套技术。多年来,Java已经成为编程技术的首选,因为它有以下好处:
平台独立
易用
加速应用程序开发的完整函数库
安全
可扩展
广泛的行业支持
Sun Microsystems公司在1995年开发出Java,尽管从一开始Java就是一种通用语言,但很快它就成为编写Applet的公认语言,Applet是一种小型程序,它在Web浏览器上运行,用来给静态网页增添互动性。互联网的发展大大促进了Java早期的成功。
话虽如此,但Applet并不是使Java出彩的唯一原因,Java还有另外一个最吸引人的特性——平台独立性承诺,即“一次编写,到处运行”(Write Once,Run Anywhere)。这意味着完全一样的程序可以在Windows、UNIX、Mac、Linux以及其他操作系统上运行,这是其他编程语言做不到的。当时C和C++是开发重要应用程序时广泛使用的两种语言,Java似乎自问世起就抢了它们的风头。
那时是Java 1.0版本。
1997年发布的Java 1.1加入了一些重要特性,比如更好的事件模型、Java Beans以及国际化。
Java 1.2于1998年12月发布,三天后版本号变为2,这标志着1999年启动的以Java作为“下一代”技术来销售的重大市场营销活动的开始。Java 2有四个销售版本:标准版(J2SE)、企业版(J2EE)、移动版(J2ME)和Java Card(从来没有在这个品牌名称中用过“2”)。
接下来是2000年发布的1.3版本,也就是J2SE 1.3。两年之后发布的1.4版本就是J2SE 1.4。J2SE 1.5于2004年发布,但是Java 2的1.5版本随后改成了Java 5。
2006年11月13日,也就是Java 6正式发布的前一个月,Sun Microsystems公司宣布将Java开源,Java SE 6成为Sun公司邀请外部开发者编写代码并帮助修补bug的第一个Java版本。实际上,在过去Sun公司也接受过来自非本公司员工的贡献,像Doug Lea在多线程方面的贡献,但这次是Sun公司第一次发出公开邀请。公司承认资源有限,外部贡献者会帮助他们更快地完成工作。
2007年5月,Sun公司以免费软件的形式向OpenJDK社区发布了它的Java源代码。IBM、Oracle和Apple后来也都加入了OpenJDK。
2010年,Oracle公司收购了Sun公司。
代号为Dolphin的Java 7于2011年7月发布,它是通过OpenJDK进行开源合作的成果。
什么造就了Java平台的独立性
你一定听说过“平台独立”或者“跨平台”这样的术语,这意味着程序可以在多种操作系统上运行,这也是Java流行的一个主要原因。但是,是什么造就了Java的独立性呢?
在传统编程中,源代码要编译成可执行代码,这种可执行代码只能在预期运行的平台上运行,也就是说给Windows编写和编译的代码只能在Windows上运行,给Linux编写的代码只能在Linux上运行,诸如此类,如图I.1所示。
而Java程序则是编译成字节码,由于字节码不是本机代码,因此不能通过字节码本身来运行,字节码只能在Java虚拟机(Java Virtual Machine,JVM)上运行。JVM是一个可以转换字节码的本机应用程序,通过使JVM可以运行于多个平台,Sun公司把Java变成了一种跨平台语言。如图I.2所示,完全一样的字节码可以在任何已经开发了JVM的操作系统上运行。

图I.2 Java编程模型
目前,JVM适用于Windows、UNIX、Linux、Free BSD以及世界上在用的所有其他主流操作系统。
JDK、JRE、JVM之间的区别
我说过Java程序必须进行编译,实际上任何编程语言都需要一个切实有用的编译器。编译器是一种将程序源代码转换成可执行格式(可以是字节码、本机代码或者其他代码)的程序。在开始Java编程之前,需要先下载一个Java编译器,它是一个名为javac的程序,这个名称是Java compiler的缩写。
虽然javac可以把Java源代码编译成字节码,但是要运行字节码还需要一个Java虚拟机。此外,由于总是会用到Java核心库中的类,因此还需要下载这些库。Java运行时环境(Java Runtime Environment,JRE)包含JVM和类库。正如你猜想的,Windows的JRE和Linux的JRE不同,而Linux的JRE又不同于其他操作系统的JRE。
Java软件有两个发行包:
JRE,它包括JVM和核心库,适用于运行字节码。
JDK,它包括JRE再加上一个编译器和其他工具,它是编写和编译Java程序所必需的。
总而言之,JVM是一个运行字节码的本机应用程序,JRE是一个包含JVM和Java类库的环境,JDK包含JRE和Java编译器以及其他工具。
JDK的第一个版本是1.0,之后的版本是1.1、1.2、1.3、1.4、1.5、1.6以及1.7。对于小版本,是在版本号后面再添加一个数字。例如,1.7.1是1.7版本的第一个小更新。
JDK 1.7(代号Dolphin)就是大家熟知的JDK 7。JDK所包含的JRE版本和JDK版本相同,因此JDK 1.7包含JRE 1.7。JDK也经常称为SDK(Software Development Kit,软件开发包)。
除JDK之外,Java程序员还需要下载说明核心库中类的Java参考资料文件。从提供JRE和JDK的同一URL可以下载到这些文件。
Java 2、J2SE、J2EE、J2ME、Java 7是什么
Sun Microsystems公司做了很多事情来推广Java。它的部分营销策略是推出Java 2这个名称,这实际上就是JDK 1.2。Java 2有三个版本:
Java 2平台标准版(J2SE)。J2SE实际上就是JDK,它也是J2EE中定义的技术的基础。
Java 2平台企业版(J2EE)。它为开发基于组件的多级企业应用程序定义了标准,包括Web服务支持和开发工具(SDK)。
Java 2平台移动版(J2ME)。它为消费类设备上运行的应用程序提供环境,比如手机、掌上电脑(PDA)以及电视机顶盒等。J2ME包含一个JVM和有限的几组类库。
在版本5中名称发生了变化。J2SE变成了Java Platform,Standard Edition 5(Java SE 5),并且去掉了J2EE和J2ME中的2。当前的企业版本是Java Platform,Enterprise Edition 7 (Java EE 7),J2ME现在称为Java Platform,Micro Edition(Java ME,没有版本号)。在本书中,Java 7是指Java SE 7。
与Sun公司出品的第一个Java版本不同,Java SE 7(以及J2SE 1.4、Java SE 5和Java SE 6)是一套规范,它定义了需要实现的特性。软件本身称为参考实现。Oracle、IBM和其他公司一起,通过OpenJDK提供了Java SE 7以及Java后续版本的参考实现。
Java EE 6和7也分别是一套规范,其中包括诸如Servlet、JavaServer Pages、JavaServer Faces和Java Messaging Service等技术。要开发和运行Java EE 6/7应用程序,需要一个Java EE 6/7应用服务器。任何人都可以实现Java EE应用服务器,这也是市场上各种服务器都能够使用的原因,其中包括一些开源的应用服务器。下面列举出一些Java EE 6/7的应用服务器:
Oracle公司的WebLogic(以前是BEA的WebLogic)
IBM的WebSphere
GlassFish
JBoss
Jonas
Apache Geronimo
在下面的网址可以找到应用服务器的完整列表:
http://www.oracle.com/technetwork/java/javaee/overview/compatibility-jsp-136984.html
JBoss、GlassFish、Jonas和Geronimo都是开源应用服务器,但是它们有不同的许可,因此在决定使用这些产品之前一定要先阅读相关内容。
Java社区进程(JCP)程序
Java之所以能成为首选技术,很大程度上要归功于Sun公司的战略,它让其他行业的人士可以参与决定Java的未来。这就让很多人觉得他们也拥有Java。许多大公司,比如IBM、Oracle、Nokia、Fujitsu等都对Java进行大力投资,因为它们也可以提出技术规范,并建议在下一个Java版本中想要包含的技术。这种协同工作采用的就是JCP(Java Community Process)程序形式,它的网站是http://www.jcp.org。
JCP程序产生的规范就是大家熟知的Java Specification Request(JSR)。例如,JSR 336是Java SE 7的规范。
面向对象编程概述
面向对象编程(OOP)是通过对真实对象模拟应用程序来工作的,OOP的三个原则是封装、继承和多态。
OOP的好处是实实在在的,这也正是包括Java在内的大多数现代编程语言都是面向对象(OO)的原因。这里甚至可以举出为了支持OOP而做了语言转化的两个非常知名的例子:C语言演化成C++,Visual Basic更新为Visual Basic.NET。
接下来讲述OOP的优势并评估学习OOP的难易程度。
OOP的优势
OOP的优势包括:代码易于维护、可重用性以及可扩展性。下面详细介绍这些优势。
1)易于维护。现代的软件应用都趋向于大规模。以前,“大”系统由数千行代码组成,现在,系统就是有上百万行代码也不算“大”。随着系统越来越大,这给开发者带来一些问题。C++之父Bjarne Stroustrup曾经这样说过:小程序可以用任何语言任何方式来编写,如果你不轻易放弃,最终你肯定会使它运行起来。但是大程序就不一样了,如果没有使用“好的编程”技巧,新问题出现的速度会和修复老问题的速度一样快。
其原因就是大程序不同部分之间的相关性。当改变了程序某个部分的某些内容时,你可能没有意识到这个改变会怎样影响程序的其他部分。OOP可以很容易地使程序模块化,模块化的同时也减少了维护的问题。因为作为对象模板的类本身就是一个模块,因此OOP的模块化是与生俱来的。优秀的设计应该允许类包含类似的功能和相关的数据。OOP中经常用到的一个重要的相关术语是耦合,它是指两个模块间的交互程度。不同部分之间的松耦合使代码重用更容易实现,这是OOP的另一个优势。
2)可重用性。可重用性是指之前写好的代码可以被代码作者和需要源代码功能的其他人重用,那么,OOP语言经常有一套预先准备好的库就不足为奇了。对Java来说,它配套提供了数百个类库或者应用程序编程接口(API),它们都是经过精心设计和测试的。编写并发布自己的库也非常容易。编程平台支持可重用性是非常吸引人的,因为它可以缩短开发时间。
类可重用性的一大挑战是为类库创建完美的文档。程序员能多快找到提供所需功能的类?是找这样的类快还是从头编写一个新的快呢?幸运的是,Java核心和扩展API都有翔实的文档。
可重用性不仅适用于类和其他类型重用的编码阶段,在OO系统中设计应用程序时,OO设计问题的解决方法也可以重用。这些解决方案称为设计模式,为了使查阅每个解决方案更为容易,我们给每种模式都起了一个名字。可重用设计模式的早期目录请参阅经典著作《Design Patterns:Elements of Reusable Object-Oriented Software》,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides合著。
3)可扩展性。每个应用程序都是唯一的,它有自己的需求和规范。就可重用性而言,有时会找不到已有的类来提供应用程序所需的精确功能,但是也许能找到一两个能提供部分功能的类。可扩展性是指通过扩展这些类使之适合你的需求,从而可以继续使用它们,这样做可以节约时间,因为不用从头开始编写代码。
在OOP中,可扩展性是通过继承来实现的。可以扩展已有的类,给它添加一些方法或者数据,也可以修改不喜欢的方法的行为。如果一些基本功能在很多情况下都要使用,但又不想让类提供非常具体的功能,那么可以提供一个泛型类,以后通过对它进行扩展来给应用程序提供特定的功能。
OOP难学吗
Java程序员需要掌握OOP。如果你使用如C和Pascal这样的过程语言进行过编程,那么会发现它们确实不同,褒贬不一。
先说坏的方面。
研究人员一直在探讨学校里教授OOP的最佳方法,有人认为在教OOP之前应该先教过程编程。在很多课程设置中,我们可以看到都是在学生临近毕业时才安排OOP的课程。
但是最近的研究认为,有过程编程技能的人的思维模式与OO程序员看待和解决问题的方式大不相同。当这个人需要学习OOP时,他需要面对的最大挑战是要完成模式转换。据说,把一个人的思维从过程模式转换到面向对象模式需要6~18个月的时间。另有研究表明,没有学过过程编程的学生不会觉得OOP有多难。
现在来说好的方面。
Java可以说是最容易学习的OOP语言之一。例如,不需要操心指针,不必花费宝贵的时间去解决由于没有销毁不用的对象而导致的内存泄漏问题,等等。此外,在早期版本中,Java提供了bug相对较少的全面的类库。一旦掌握了OOP的基本要点,那么使用Java编程就真正变得非常轻松容易了。
关于本书
下面是各章内容的概述。
第1章旨在使读者体验使用Java的感受。其中包括编写一个简单的java程序,用javac工具编译,用java程序运行。此外,还有对编码规范的一些建议以及集成开发环境的内容。
第2章讲解Java语言的语法。将介绍字符集、基本类型、变量、运算符等内容。
第3章讲述Java语句,包括:for、while、do-while、if、if-else、switch、break和continue。
第4章是本书的第一个OOP课程。首先讲解Java对象是什么,怎样把它存储到内存中。接着继续讨论类、类成员以及两个OOP概念(抽象和封装)。此外还简单介绍一些有关主题,比如垃圾回收和对象比较。
第5章包括Java核心库中重要的类:java.lang.Object、java.lang.String、java.lang.StringBuffer、
java.lang.StringBuilder、包装类,以及java.util.Scanner。还会介绍装箱/拆箱和可变参数。因为该章讲述的类是Java中最常用的一部分类,因此这是非常重要的一章。
第6章讨论一种能使代码具有可扩展性的OOP特性。该章教你怎样扩展类,作用于子类的可见性、方法覆盖,等等。
毫无疑问,错误处理是任何编程语言的一项重要特性。作为一门成熟的语言,Java有非常稳固的错误处理机制,它可以帮你防止bug蔓延。第7章详细讨论这个机制。
第8章讲述在使用数字和日期时要处理的3个问题:解析、格式化和操作。该章介绍在这几个任务方面可以帮助你的Java类。
第9章解释接口不仅仅是一个没有实现的类。它还会定义服务提供方和客户端之间的协议,讲述怎样使用接口和抽象类。
第10章的内容是枚举类型,这是从Java 5开始加入的类型。
第11章展示怎样使用java.util包的成员将对象分组并对它们进行操作。
泛型是Java中非常重要的特性,第12章会对这个特性进行详细介绍。
第13章介绍流的概念,并讲述怎样使用java.io包中的4个流类型来执行输入/输出操作。此外还会讲解对象序列化和反序列化。
第14章讲述怎样在类内部编写另一个类以及为什么这个OOP特性非常有用。
第15章是关于Swing两章内容的第一章,简单介绍AWT组件并详细介绍一些基本的Swing组件。
第16章是关于Swing的第二章,包括更高级的技术,比如布局管理、事件处理,以及Swing界面外观。
多态是OOP的重要支柱之一,在编译时不知道对象类型的情况下,多态的作用令人难以置信。第17章阐述这个特性并提供非常有用的范例。
第18章讨论Java中的一项特性。讲述JDK中的标准注解、普通注解、元注解,以及定制注解。
现如今,软件应用程序部署在不同的国家和地区是非常常见的。这样的应用程序一定要设计成国际化的。第19章探讨Java程序员可以使用的技术。
Applet是指可以在Web浏览器中运行的小程序。第20章讲解Applet的生命周期、安全限制,以及JApplet。
第21章的内容是有关网络编程中用到的类。这里用一个简单的Web服务器应用程序来说明怎样使用这些类。
访问数据库和操作数据是业务应用程序中最重要的一部分任务。数据库服务器的种类繁多,访问不同的数据库需要不同的技术。幸运的是,对Java程序员来说,Java数据库连接(JDBC)技术提供了访问数据库的统一方法。JDBC在第22章中进行讨论。
线程是操作系统分配处理器时间的基本处理单元,在一个进程里面可以有多个线程在执行代码。第23章解释在Java中的多线程编程并不是只有Java高手才可以驾驭的。
第24章是关于多线程编程的第二章,讨论使多线程编程变得更加容易的接口和类。
第25章讲解Java应用程序的用户可以怎样限制运行Java应用程序,以及怎样用加密技术来保护应用程序和数据。
第26章探讨Servlet技术和Servlet API并列举几个例子。
第27章讲述另一种Web开发技术,并介绍怎样编写JSP页面。
第28章介绍javadoc工具,Java程序员可以用它来为API生成文档。
第29章讨论Java Web Start,以及怎样用它来把Java应用程序部署到互联网、局域网,并介绍如何从CD部署。
第30章介绍反射技术,这是一种创建对象并操作和调用它的成员的高级技术。
第31章的内容是JavaFX,它是最新的Java技术,用来创建各种既可以在桌面上也可以在浏览器中运行的客户端应用程序。
第32章讲述FXML,它是一种可以用来在JavaFX应用程序中分隔表示层和业务逻辑层的标记语言。
第33章讲述Android编程并介绍怎样安装软件开发工具包以及生成你的第一个应用程序。
第34章讲述Android开发新手可以用到的基础技术。
第35章介绍用Android编写的更多的应用程序。
附录A、附录B和附录C分别介绍javac、java和jar工具。
附录D和附录E分别简单介绍了NetBeans和Eclipse。
下载和安装Java
在开始编译和运行Java程序前,需要先下载和安装JDK,同时还要配置一些系统环境变量。
下载和安装JDK
从Oracle的网站可以下载到Windows、Linux和Solaris的JRE和JDK,网址为:
http://www.oracle.com/technetwork/java/javase/downloads/index.html。
如果点击页面的下载链接,就会跳转到让你选择安装平台(Windows、Linux、Solaris或者Mac OS)的页面,同时也为这些平台提供了64位的版本。另外要注意,此链接还提供了JRE。但是对于开发来说,需要的是JDK而不只是JRE,JRE只适用于运行编译过的Java类。JDK本身包含JRE。
下载完成后,还需要安装它。不同的操作系统安装方法各不相同,下面详细介绍安装过程。
在Windows中安装
在Windows中安装非常简单,只要双击下载的可执行文件图标并按照说明进行安装即可。图I.3展示了安装向导的第一个对话框。
在Linux中安装
在Linux平台中,JDK有两种形式的安装文件。
RPM,用于支持RPM包管理系统的Linux平台,比如Red Hat和SuSE。
自解压包,它是一个包含安装包的压缩文件。
如果使用RPM,应遵循以下步骤:
1)用su命令切换到root。
2)解压下载的文件。
3)把当前目录切换到下载文件所在的位置,并执行chmod更改文件执行权限:

这里的rpmFile是RPM文件。
4)运行RPM文件:

如果使用自解压的二进制文件安装,应遵循以下步骤:
1)解压下载的文件。
2)用chmod为文件规定执行权限:

这里的binFile是下载的适用于平台的bin文件。
3)把当前目录切换到要安装文件的位置。
4)运行自解压二进制文件。把路径添加到下载文件前面来执行它。例如,如果文件在当前目录下,就在它的签名前面加上“./”(如果PATH环境变量中没有“.”,那这么做就是必要的):

设置系统环境变量
安装完JDK后就可以开始编译和运行Java程序了,但是只能从javac和java程序所在的位置调用编译器和JRE,或者通过把安装路径放到命令中进行调用。为了能更容易地编译和运行程序,在计算机上设置PATH环境变量就显得尤为重要,因为这样就可以从任何目录调用javac和java了。
在Windows中设置Path环境变量
在Windows中设置Path环境变量的步骤如下:
1)依次点击Start → Settings → Control Panel。
2)双击System。
3)选择Advanced标签然后点击Environment Variables。
4)进入User Variables或者System Variables面板中的Path环境变量。Path的值是一组用分号隔开的目录。现在,将Java安装目录下bin目录的完整路径添加到现有Path值的末尾。这个路径类似于下面这样:

5)点击Set、OK或者Apply。
在UNIX和Linux中设置PATH环境变量
根据使用的shell在这些操作系统上设置PATH环境变量。
对于C shell,在~/.cshrc文件后添加以下内容:

这里的path/to/jdk/bin是JDK安装目录下的bin目录。
对于Bourne Again shell,在~/.bashrc或者~/.bash_profile文件后添加下面这样一行代码:

这里的path/to/jdk/bin是JDK安装目录下的bin目录。
安装测试
为了确认已经正确安装了JDK,在计算机的任何目录的命令行中输入javac。如果看到了有关怎样正确运行javac的说明,那就说明已经成功安装。另一方面,如果只能从JDK安装目录的bin目录运行javac,那就是还没有配置好PATH环境变量。
用于Macintosh的JDK 7
Apple公司的网站http://support.apple.com/downloads上有JDK 7之前的版本。Apple过去一直发布和维护适用于Mac的JDK版本,但是最后一次更新了JDK 6之后就不再这样做了。
幸运的是,Oracle现在提供用于Mac的JDK 7二进制文件,可以从下面的网页下载:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
但是这个Oracle发布的版本只适用于基于Intel硬件运行的Mac OS X 10.7.3(Lion)或者更新的版本。如果你用的是Mac OS 10.6(Snow Leopard),那么可以在这里试试运气:
http://code.google.com/p/openjdk-osx-build/
遗憾的是,目前还没有已知的可以适用于10.6之前Mac计算机的JDK 7发布版本。
下载Java API文档
在进行Java编程时,总是会用到核心库中的类。即使是资深Java程序员在编程时也要查阅这些库的文档,因此,应该从下面的网址下载:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
(需要往下移动滚动条,直到看到“Java SE 7 Documentation”为止。)
在下面的网址还有API文档:
http://www.oracle.com/javase/7/docs/api
下载程序范例和答案
本书配套的程序范例和每一章的习题答案都可以从华章网站(www.hzbook.com)的本书页面中下载。

上架指导

计算机\程序设计

封底文字

这本书涵盖Java开发者需要掌握的最重要的主题:面向对象编程、Java语言语法和Java库。书中详细讨论了Java编程主题中最精华的部分,并提供大量的实例和丰富的练习,为系统学习Java程序开发提供全面参考。通过充分理解所有章节的内容并完成练习题,你将能够很好地完成中级Java程序员的日常工作。
本书主要内容包括:
 Java语言和常见的Java语句、对象和类
 OOP的三个原则
 Java核心类
 错误处理
 接口和抽象类
 Java的重要特性——泛型
 如何用java.io的流类型执行输入/输出
 Swing知识
 Applet生命周期、安全性、限制和Jpplet
 JDK中的注解
 简化多线程编程的接口和类
 Servlet和Servlet API
 Android编程

作者简介

[美] 布迪·克尼亚万(Budi Kurniawan)著:暂无简介

译者简介

闫斌 贺莲 译:暂无简介

图书目录

前 言
第1章 初识Java 1
1.1 第一个Java程序 1
1.1.1 编写Java程序 1
1.1.2 编译Java程序 2
1.1.3 运行Java程序 2
1.2 Java编码规范 3
1.3 集成开发环境 3
1.4 小结 4
习题 4
第2章 语言基础 5
2.1 ASCII和Unicode 5
2.2 分隔符 7
2.3 基本类型 7
2.4 变量 8
2.4.1 Java字母和Java数字 9
2.4.2 Sun公司的变量命名规范 11
2.5 常量 11
2.6 字面量 11
2.6.1 整数字面量 11
2.6.2 浮点字面量 12
2.6.3 布尔字面量 14
2.6.4 字符字面量 14
2.7 基本类型转换 15
2.7.1 扩大转换 15
2.7.2 缩小转换 15
2.8 运算符 16
2.8.1 一元运算符 17
2.8.2 算术运算符 18
2.8.3 相等运算符 19
2.8.4 关系运算符 20
2.8.5 条件运算符 20
2.8.6 移位运算符 21
2.8.7 赋值运算符 22
2.8.8 整数按位运算符 22
2.8.9 逻辑运算符 23
2.8.10 运算符优先级 23
2.8.11 升级 24
2.9 注释 24
2.10 小结 25
习题 25
第3章 语句 26
3.1 Java语句概述 26
3.2 if语句 27
3.3 while语句 29
3.4 do-while语句 31
3.5 for语句 31
3.6 break语句 34
3.7 continue语句 35
3.8 switch语句 36
3.9 小结 37
习题 37
第4章 对象和类 38
4.1 什么是Java对象 38
4.2 Java类 39
4.2.1 域 40
4.2.2 方法 40
4.2.3 UML类图中的类成员 42
4.3 创建对象 42
4.4 关键字null 43
4.5 内存中的对象 44
4.6 Java包 45
4.7 封装和存取控制 46
4.7.1 类访问控制修饰符 47
4.7.2 类成员访问控制修饰符 48
4.8 关键字this 50
4.9 使用其他类 51
4.10 final变量 53
4.11 静态成员 53
4.12 静态final变量 55
4.13 静态导入 56
4.14 变量作用域 57
4.15 方法重载 58
4.16 传值还是传引用 59
4.17 加载、连接和初始化 59
4.17.1 加载 60
4.17.2 链接 60
4.17.3 初始化 60
4.18 对象创建的初始化 61
4.19 对象的比较 64
4.20 垃圾回收器 64
4.21 小结 65
习题 65
第5章 核心类 66
5.1 java.lang.Object 67
5.2 java.lang.String 67
5.2.1 比较两个String 68
5.2.2 字符串字面量 69
5.2.3 特定字符转义 69
5.2.4 对String使用switch语句 70
5.2.5 String类的构造器 70
5.2.6 String类的方法 71
5.3 StringBuffer和StringBuilder 73
5.3.1 StringBuilder类的构造器 73
5.3.2 StringBuilder类的方法 74
5.4 基本类型封装 74
5.4.1 java.lang.Integer 75
5.4.2 java.lang.Boolean 75
5.4.3 java.lang.Character 76
5.5 数组 76
5.5.1 迭代数组 78
5.5.2 修改数组大小 78
5.5.3 将String数组传递给main 80
5.6 java.lang.Class 80
5.7 java.lang.System 81
5.8 java.util.Scanner 84
5.9 装箱和拆箱 85
5.10 可变参数 85
5.11 格式和printf方法 86
5.12 小结 87
习题 87
第6章 继承 88
6.1 继承概述 88
6.1.1 关键字extends 88
6.1.2 is-a关系 89
6.2 可访问性 90
6.3 方法覆盖 91
6.4 调用超类的构造器 92
6.5 调用超类的隐藏成员 94
6.6 类型转换 95
6.7 final类 95
6.8 关键字instanceof 96
6.9 小结 96
习题 96
第7章 错误处理 97
7.1 捕捉异常 97
7.2 没有catch块的try词句 99
7.3 捕捉多个异常 99
7.4 try-with-resource语句 100
7.5 java.lang.Exception类 101
7.6 从方法抛出异常 102
7.7 用户自定义异常 103
7.8 异常处理总结 104
7.9 小结 105
习题 105
第8章 数字和日期 106
8.1 数字解析 106
8.2 数字格式化 107
8.3 用java.text.NumberFormat
进行数字解析 108
8.4 java.lang.Math类 109
8.5 java.util.Date类 109
8.6 java.util.Calendar类 110
8.7 用DateFormat进行日期解析和格式化 111
8.7.1 DateFormat 111
8.7.2 SimpleDateFormat类 113
8.8 小结 114
习题 114
第9章 接口和抽象类 115
9.1 接口的概念 115
9.2 从技术上来看的接口 116
9.2.1 接口中的域 117
9.2.2 方法 118
9.3 基类 118
9.4 抽象类 119
9.5 小结 120
习题 120
第10章 枚举 121
10.1 枚举概述 121
10.2 类中的枚举 122
10.3 java.lang.Enum类 123
10.4 迭代枚举值 123
10.5 switch中的枚举 123
10.6 小结 124
习题 124
第11章 集合框架 125
11.1 集合框架概述 125
11.2 Collection接口 126
11.3 List和ArrayList 126
11.4 用Iterator和for迭代集合 128
11.5 Set和HashSet 129
11.6 Queue和LinkedList 130
11.7 集合转换 131
11.8 Map和HashMap 131
11.9 对象的比较和排序 132
11.9.1 使用java.lang.Comparable 132
11.9.2 使用Comparable和Comparator 135
11.10 小结 139
习题 139
第12章 泛型 140
12.1 没有泛型的生活 140
12.2 泛型类型简介 141
12.3 使用没有类型参数的泛型类型 144
12.4 使用 通配符 144
12.5 在方法中使用有界通配符 146
12.6 编写泛型类型 147
12.7 小结 148
习题 148
第13章 输入 / 输出 149
13.1 文件系统和路径 150
13.2 文件和目录的处理与操作 152
13.2.1 创建和删除文件与目录 152
13.2.2 检索目录的对象 152
13.2.3 复制和移动文件 153
13.2.4 文件的读取和写入 153
13.3 输入/输出流 155
13.4 读取二进制数据 156
13.5 写入二进制数据 159
13.6 写入文本(字符) 162
13.6.1 Writer 163
13.6.2 OutputStreamWriter 163
13.6.3 PrintWriter 164
13.7 读取文本(字符) 166
13.7.1 Reader 166
13.7.2 InputStreamReader 167
13.7.3 BufferedReader 168
13.8 用PrintStream记录日志 169
13.9 随机访问文件 170
13.10 对象序列化 174
13.11 小结 177
习题 177
第14章 嵌套类和内部类 178
14.1 嵌套类概述 178
14.2 静态嵌套类 179
14.3 成员内部类 180
14.4 局部内部类 182
14.5 匿名内部类 184
14.6 深入嵌套类和内部类 185
14.7 小结 187
习题 187
第15章 Swing基础 188
15.1 AWT组件 189
15.2 有用的AWT类 191
15.2.1 java.awt.Color 191
15.2.2 java.awt.Font 191
15.2.3 java.awt.Point 192
15.2.4 java.awt.Dimension 192
15.2.5 java.awt.Rectangle 192
15.2.6 java.awt.Graphics 192
15.2.7 java.awt.Toolkit 193
15.3 基本Swing组件 193
15.3.1 JFrame 194
15.3.2 调整大小和定位 197
15.3.3 扩展JFrame 198
15.3.4 JComponent 199
15.3.5 Icon和ImageIcon 200
15.3.6 JLabel 201
15.3.7 JButton 202
15.3.8 JTextField和JPasswordField 203
15.3.9 JTextArea 205
15.3.10 JCheckbox 207
15.3.11 JRadioButton 208
15.3.12 Jlist 209
15.3.13 JComboBox 211
15.3.14 JDialog 212
15.3.15 JOptionPane 215
15.3.16 JFileChooser 219
15.4 小结 221
习题 221
第16章 Swing进阶 222
16.1 布局管理器 222
16.1.1 BorderLayout 223
16.1.2 FlowLayout 225
16.1.3 BoxLayout 227
16.1.4 GridLayout 228
16.1.5 不使用LayoutManager 229
16.2 事件处理 230
16.2.1 Java事件模型 230
16.2.2 Swing事件处理 231
16.2.3 AWT事件API 232
16.2.4 处理ActionEvent 235
16.2.5 处理MouseEvent 236
16.2.6 将监听器写成匿名类 237
16.2.7 处理JRadioButton的ActionEvent 240
16.2.8 处理KeyEvent 241
16.2.9 处理WindowListener 242
16.3 使用菜单 243
16.4 界面外观 245
16.5 快速启动画面 246
16.6 系统托盘支持 249
16.7 桌面帮助程序 251
16.8 小结 255
习题 255
第17章 多态 256
17.1 定义多态 256
17.2 多态的作用 259
17.3 绘图应用程序中的多态 260
17.4 多态和反射 265
17.5 小结 266
习题 266
第18章 注解 267
18.1 注解概述 267
18.1.1 注解和注解类型 267
18.1.2 注解语法 268
18.1.3 注解接口 268
18.2 标准注解 269
18.2.1 Override 269
18.2.2 Deprecated 270
18.2.3 SuppressWarnings 271
18.3 通用注解 272
18.4 标准元注解 272
18.4.1 Documented 272
18.4.2 Inherited 273
18.4.3 Retention 273
18.4.4 Target 273
18.5 定制注解类型 274
18.5.1 编写自己的定制注解类型 274
18.5.2 使用定制注解类型 275
18.5.3 用反射查询注解 275
18.6 小结 276
习题 276
第19章 国际化 277
19.1 Locales 278
19.2 国际化应用程序 279
19.2.1 将文本组件单独放进属性文件 279
19.2.2 用ResourceBundle读取属性文件 280
19.3 国际化的Swing应用程序 280
19.4 小结 282
习题 282
第20章 Applet 283
20.1 Applet简史 283
20.2 Applet API 284
20.2.1 Applet类 284
20.2.2 AppletContext接口 286
20.2.3 AudioClip接口 286
20.2.4 AppletStub接口 287
20.3 安全限制 287
20.4 编写和部署Applet 287
20.5 AppletViewer工作原理 289
20.6 将参数传递给Applet 290
20.7 SoundPlayerApplet 293
20.8 JApplet 294
20.9 JAR文件中的Applet部署 295
20.10 更快速加载 296
20.11 小结 296
习题 296
第21章 Java网络 297
21.1 网络概述 297
21.2 超文本传输协议(HTTP) 298
21.2.1 HTTP请求 298
21.2.2 HTTP响应 299
21.3 java.net.URL 300
21.3.1 解析URL 300
21.3.2 读取Web资源 301
21.4 java.net.URLConnection 302
21.4.1 读取Web资源 303
21.4.2 写入Web服务器 305
21.5 java.net.Socket 305
21.6 java.net.ServerSocket 307
21.7 Web服务器应用程序 308
21.7.1 HttpServer类 308
21.7.2 Request类 312
21.7.3 Response类 313
21.7.4 运行应用程序 315
21.8 小结 316
习题 316
第22章 Java数据库连接 317
22.1 JDBC简介 317
22.2 数据访问的四个步骤 318
22.2.1 加载JDBC驱动程序 318
22.2.2 获得数据库连接 319
22.2.3 创建Statement对象 320
22.2.4 创建ResultSet对象 321
22.3 关闭JDBC对象 322
22.4 读取元数据 323
22.5 SQL Tool示例 323
22.5.1 准备MySQL 324
22.5.2 SQL Tool类 325
22.6 小结 328
习题 328
第23章 Java线程 329
23.1 Java线程简介 329
23.2 创建线程 330
23.2.1 扩展线程 331
23.2.2 实现Runnable 332
23.3 使用多线程 333
23.4 线程优先级 334
23.5 停止线程 336
23.6 同步 338
23.6.1 线程冲突 339
23.6.2 方法同步 340
23.6.3 块同步 341
23.7 可见性 341
23.8 线程协调 344
23.9 使用Timer 348
23.10 Swing Timer 350
23.11 小结 352
习题 352
第24章 并发工具 353
24.1 原子变量 353
24.2 Executor和ExecutorService 354
24.3 Callable和Future 358
24.4 Swing Worker 361
24.5 锁 364
习题 365
第25章 安全 366
25.1 Java安全概述 366
25.2 使用安全管理器 367
25.3 策略文件 368
25.3.1 keystore 369
25.3.2 grant 369
25.4 权限 370
25.4.1 java.io.FilePermission 371
25.4.2 java.security.BasicPermission 371
25.4.3 java.util.Property-Permission 371
25.4.4 java.net.SocketPermission 371
25.4.5 java.security.Unresolve-Permission 372
25.4.6 java.lang.Runtime-Permission 372
25.4.7 java.awt.AWTPermission 372
25.4.8 java.net.NetPermission 372
25.4.9 java.lang.reflect.ReflectPermission 373
25.4.10 java.io.Serializable-Permission 373
25.4.11 java.security.Security-Permission 373
25.4.12 java.security.AllPermission 373
25.4.13 javax.security.auth.AuthPermission 373
25.5 使用Policy Tool 374
25.6 Applet安全 375
25.7 安全编程 375
25.8 加密概述 376
25.8.1 加密/解密 377
25.8.2 认证 377
25.8.3 数据完整性 378
25.8.4 SSL工作原理 379
25.9 创建证书 380
25.10 KeyTool程序 380
25.10.1 生成密钥对 380
25.10.2 认证 382
25.10.3 将证书导入密钥库 382
25.10.4 从密钥库导出证书 382
25.10.5 列出密钥库条目 383
25.11 JarSigner工具 383
25.11.1 签署JAR文件 383
25.11.2 验证已签署的JAR文件 383
25.11.3 范例:签署Applet 384
25.12 Java Cryptography API 386
25.13 小结 386
习题 386
第26章 Java Web应用程序 387
26.1 Servlet应用程序架构 387
26.2 Servlet API概述 388
26.3 Servlet 389
26.4 编写基本Servlet应用程序 390
26.4.1 安装Tomcat 390
26.4.2 编写和编译Servlet类 390
26.4.3 应用程序的目录结构 392
26.4.4 调用Servlet 393
26.5 ServletRequest 393
26.6 ServletResponse 394
26.7 ServletConfig 394
26.8 ServletContext 396
26.9 GenericServlet 397
26.10 HTTP Servlet 398
26.10.1 HttpServlet 399
26.10.2 HttpServletRequest 400
26.10.3 HttpServletResponse 401
26.10.4 编写Http Servlet 401
26.11 使用部署描述符 404
26.12 小结 407
习题 407
第27章 JavaServer Pages 408
27.1 JSP概述 408
27.2 jspInit、jspDestroy以及其他方法 410
27.3 隐式对象 411
27.4 JSP语法元素 412
27.4.1 指令 412
27.4.2 脚本元素 415
27.5 处理错误 416
27.6 小结 417
习题 417
第28章 Javadoc 418
28.1 在Java类中编写文档 418
28.1.1 @author 419
28.1.2 {@code} 419
28.1.3 {@docRoot} 420
28.1.4 @deprecated 420
28.1.5 @exception 420
28.1.6 {@inheritDoc} 420
28.1.7 {@link} 420
28.1.8 {@linkplain} 421
28.1.9 {@literal} 421
28.1.10 {@param} 421
28.1.11 @return 421
28.1.12 @see 422
28.1.13 @serial 422
28.1.14 @serialData 422
28.1.15 @serialField 422
28.1.16 @since 423
28.1.17 @throws 423
28.1.18 {@value} 423
28.1.19 @version 423
28.2 Javadoc语法 423
28.2.1 Javadoc选项 424
28.2.2 标准doclet选项 425
28.2.3 生成文档 426
28.3 小结 427
习题 427
第29章 应用程序部署 428
29.1 JWS 概述 428
29.2 JNLP文件语法 429
29.2.1 jnlp元素 429
29.2.2 information元素 430
29.2.3 security元素 431
29.2.4 resources元素 431
29.2.5 application-desc元素 431
29.2.6 applet-desc元素 431
29.3 部署范例 432
29.4 安全关注 434
29.5 小结 435
习题 435
第30章 反射 436
30.1 概述 436
30.2 java.lang.Class 437
30.3 创建对象 438
30.4 创建数组 440
30.5 域操作 442
30.6 方法操作 443
30.7 调用方法 444
30.8 小结 446
习题 446
第31章 JavaFX概述 447
31.1 概述 447
31.2 安装 448
31.3 第一个JavaFX应用程序 448
31.4 Application、Stage和Scene 449
31.4.1 Application类 450
31.4.2 Stage类 450
31.4.3 Scene类 450
31.5 UI组件 451
31.6 控件 451
31.7 Region 454
31.8 事件处理 456
31.9 CSS样式 459
31.10 小结 462
习题 462
第32章 使用FXML的JavaFX 463
32.1 概述 463
32.2 一个基于FXML的简单应用程序 465
32.3 用FXML进行事件处理 467
32.4 小结 470
习题 470
第33章 Android编程介绍 471
33.1 概述 471
33.2 下载安装Android开发工具 471
33.3 第一个Android应用程序 472
33.4 Android清单 474
33.5 在仿真器上运行应用程序 475
33.6 应用程序结构 478
33.7 替换应用程序图标 478
33.8 日志记录 478
33.9 调试应用程序 479
33.10 在实际设备上运行 481
33.11 更新SDK 481
33.12 小结 482
习题 482
第34章 创建Android应用程序 483
34.1 概述 483
34.2 活动的生命周期 484
34.3 Android UI组件 485
34.3.1 使用ADT Eclipse UI工具 486
34.3.2 示例:使用Basic Components 486
34.4 布局组件 489
34.5 监听器 490
34.6 启动另一个活动 493
34.7 小结 497
习题 497
第35 章 更多的Android应用程序 498
35.1 处理Handler 498
35.2 MediaRecorder 502
35.3 异步任务 506
35.4 小结 511
习题 511
附录 A javac 512
附录B java 517
附录 C jar 522
附录 D NetBeans 526
附录 E Eclipse 530

教学资源推荐
作者: [美]本贾尼·斯特劳斯特鲁普(Bjarne Stroustrup) 著
作者: (美)Y. Daniel Liang 著 阿姆斯特朗亚特兰大州立大学
作者: [美]梁勇(Y.Daniel Liang) 著
作者: 尹宝林
参考读物推荐
作者: 宋文鹏 梁然 韩丰 著
作者: (美)Benjamin LaGrone 著
作者: 张军
作者: Stephen G. Kochan