首页>参考读物>计算机科学与技术>综合

Java 7程序设计
作者 : (加)Budi Kurniawan 著
译者 : 俞黎敏 徐周乐 俞哲皆 等译
出版日期 : 2012-08-03
ISBN : 978-7-111-39030-5
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 478
开本 : 16
原书名 : Java 7学习指南
原出版社: Brainy Software
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

世界知名的Java专家和资深Java EE高级架构师的经典之作!由于Java的OOP、易用性和平台独立性等特点,优势使得它成为首选的编程技术。本书是一本Java SE 7快速入门教程,涵盖Java编程语言、Java OOP和Java核心类库3个主题。本书首先介绍了Java 7在语法、语句、对象和类、核心类、继承、错误处理等基础知识,掌握这部分内容有助于快速入门Java 7;然后对接口和抽象类、枚举、集合框架、泛型、输入输出、嵌套类和内部类进行了深入解析,掌握这部分内容有助于深入理解Java的底层原理;接着阐述Swing的基础和高级知识、多态、注解、国际化、Java网络、JDBC、Java线程,并发工具、安全、Java Web应用程序、JavaServer Pages、Javadoc,以及应用程序部署等内容,掌握这部分内容有助于提升编程技能。
 本书结构清晰、环环相扣,便于读者高效地学习。本书适合Java初学者和中高级程序员阅读和参考,也可以作为计算机相关专业教材。

图书特色

Java不仅是一门面向对象编程语言,它还是一系列技术的统称,具有跨平台、易用、安全、可扩展等特点,同时还具有能加速应用程序开发的完整类库和广泛的行业支持。然而,要成为一名专业的Java程序员,仅掌握其语法和OOP特性(如封装、继承和多态等)是远远不够的,还需要透彻理解Java核心类库的知识,掌握如何使用大量类库能加快开发过程。本书立足于最新的Java版本,从语法、面向对象技术和核心类库三个方面全面讲解整个Java技术体系,是专门为希望系统学习Java 7程序设计的读者量身定做的。
本书主要内容:
Java语言的语法和常见的Java语句、对象和类
OOP的三个原则(封装、继承和多态),以及OOP的优势
Java核心类库中重要的类
如何使用接口和抽象类
如何处理错误和异常
Java中重要的特性——泛型
如何利用java.io中的流类型执行输入/输出操作
JDK中配套的各种注解
Applet的生命周期、安全性、限制,以及JApplet
Swing基础知识和高级知识
简化多线程编程的接口和类
Servlet技术和Servlet API


作者简介
Budi Kurniawan 资深Java技术专家、Java企业级应用架构师和IT咨询师,是软件咨询和技术出版公司Brainy Software的创始人,经验十分丰富,主要研究方向包括互联网和面向对象程序设计。他还是一位经验丰富的技术作家,撰写了深入揭示Tomcat工作原理和设计理念的名著《How Tomcat Works》(中文书名:《深入剖析Tomcat》,机械工业出版社出版)和《Struts Design and Programming》。除了其他一些计算机技术图书,他已经并在多种权威出版物上发表过100多篇文章,如《JavaPro》、《JavaWorld》等。

译者简介
俞黎敏
(ID:YuLimin,网名:阿敏总司令)
资深Java技术专家,就职于IBM广州分公司,担任软件部高级信息工程师、资源技术顾问,主要负责IBM WebSphere系列产品的技术支持工作,专注于产品新特性、系统性能调优、疑难问题诊断与解决。
利用业余时间担任CSDN、CJSDN、Dev2Dev、Matrix、JavaWorldTW、Spring中文、WebSphereChina.net等Java论坛版主,在各大技术社区推动开源和敏捷开发做出了积极的贡献。开源爱好者,曾经参与Spring 2.0 Reference的翻译审校工作和Seam 1.2.1 Reference的翻译工作,并组织和完成Seam 2.0 Reference翻译工作。参与审校与翻译的书籍有《Ajax设计模式》、《CSS实战手册》、《Hibernate实战(第2版)》、《Java脚本编程》、《Effective Java中文版(第2版)》、《Seam实战》等。

博客:http://blog.csdn.net/YuLimin/
或者 http://YuLimin.ItEye.com

图书前言

欢迎阅读本书。Java是一种很容易学会的成熟的编程语言,同时,它也汇集各种技术于一身,经常令初学者不知道从何入手。如果你也有同感,那么本书就很适合你,因为这是一本特意为初学者量身定制的教程。
  作为面向初学者的教程,本书不是要教会你每一种Java技术(因为薄薄一本书是不可能囊括所有Java技术的,这也是大部分Java类书籍都只专注于某一种技术的原因)。应该说,本书涵盖了最重要的Java编程技术,使你能以此为基础进而学习其他技术。本书的内容依然丰富,只要你真正理解所有章节的内容,并且完成练习,你将完全能够胜任一名中级Java程序员的日常工作。
  本书共三大主题,这些是一名专业级Java程序员必须熟练掌握的内容:
  Java编程语言;
  Java面向对象编程(OOP);
  Java核心类库。
  要想把以上三大主题组织好一本高效的Java教材之所以困难,正是因为以下两方面的原因。一方面,Java是一种面向对象编程(OOP)的语言,如果你已经了解OOP的话,就会知道它的语法是比较容易学的。另一方面,OOP特性(如继承、多态以及数据封装),用现实的案例进行示范也很容易。问题在于,理解真实的Java程序需要具备Java核心类库的知识。
由于它们之间的相辅相成关系,这三大主题并没有划分成三个独立的部分,而是讨论某一主题的章节会与讨论另一主题的章节相互交织在一起。例如,在解释多态之前,我要先确保你了解某些Java类,之后才能讲解真实的案例。此外,如泛型这样的语言特性,如果你事先不理解某些类,是无法解释清楚的,因此我就会在讲完那些基础类之后再讨论泛型。
  还有这样的情况:某一个主题可能会在两个甚至更多个地方出现。例如,for语句是一项基本的语言特性,它应该在较前面的章节中进行讨论。但是,for还可以用来迭代一组对象,这种特性则又只能在讲完“集合框架”之后再做讨论。因此,for最早在第3章中出现,之后在第11章中再度出现。
  接下来,我要在此首先高度概述一下Java,粗略介绍一下面向对象编程(OOP)的概念,并简要地描述每一章的主要内容,以及讲述如何安装Java软件。
Java语言和技术
  Java不仅是一种面向对象的编辑语言,它还是使软件开发变得更加快速并且获得更健壮、更安全的应用程序的一系列技术。多年来,Java之所以会成为首选的编程技术,是因为它具有如下优势。
  平台独立性
  易用性
  加速应用程序开发的完整类库
  安全性
  可扩展性
  广泛的行业支持
  Sun Microsystems公司于1995年开发出Java,随后Java(尽管它从一开始就是一种通用的语言)成为编写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以及国际化(internationalization,i18n)。
  1998年12月,Java 1.2发布了。在它发布3天之后,版本号由1变成了2,它标志着于1999年开始掀起的一场以Java作为“下一代”技术的销售战役拉开了序幕。Java 2以4种风格出售:标准版(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 Microsystems公司诚邀外部开发者贡献代码和帮助修复bug后的第一个Java版本。其实,Sun公司过去也曾接受过非本公司员工的参与,如Doug Lea在多线程方面的付出,但这是Sun公司第一次发出公开的邀请。Sun公司承认他们的资源有限,在不久的将来,外界的参与者将会帮助他们画上完美的句号。
  2007年5月,Sun公司把其Java源代码作为免费软件在OpenJDK社区发布。IBM、Oracle和Apple公司随后也都纷纷加入了OpenJDK。
  2010年,Oracle公司收购了Sun公司。
  Java 7(代号Dolphin)于2011年7月发布,这也是通过OpenJDK进行开源合作的成果。
是什么使Java平台能够独立
  你一定听说过“平台独立”或者“跨平台”这类术语,它意味着程序可以在多种操作系统上运行。这也是使Java深得人心的一大原因。但是,到底是什么使Java得以实现平台独立呢?
  在传统的编程中,源代码是要编译成可执行代码的。这种可执行代码只能在所设计的平台上运行。换句话说,为Windows而编写和编译的代码就只能在Windows上运行,在Linux中编写的代码就只能在Linux上运行,等等,如图I.1所示。

图I.1 传统的编程范例
  而Java程序则编译成字节码(bytecode)。你不能让它自己运行字节码,因为它不是本机代码(native code)。字节码只能在Java虚拟机(JVM)上运行。JVM是一种解释字节码的本机应用程序。Sun公司使JVM在众多平台上都可用,从而把Java变成一种跨平台的语言。如图I.2所示,同一个字节码就可以在任何操作系统的JVM上运行。

图I.2 Java编程模式
  目前,JVM适用于Windows、UNIX、Linux、Free BSD,以及世界上在用的其他的所有主流操作系统。
JDK、JRE、JVM之间有何区别
  我说过,Java程序必须进行编译。事实上,任何编程语言都需要一个编译器,经过编译后编程语言才真正有用。编译器是一种将程序源代码转化成可执行格式(如字节码、本机代码或者其他)的程序。在开始利用Java编程之前,必须先下载一个Java编译器。Java编译器是一个名为javac的程序,它是Java compiler的缩写。
  虽然javac可以将Java源代码编译成字节码,但要运行字节码,还需要一个Java虚拟机(JVM)。此外,由于你常常需要用到Java核心类库中的类,因此还需要下载这些类库。Java运行时环境(Java Runtime Environment,JRE)包含JVM和类库。当然,Windows的JRE与Linux的JRE不同,也就是说,某一种操作系统的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的同一个网址可以下载说明文档。
  Java 2、J2SE、J2EE、J2ME、Java 7究竟为何物
  Sun公司为推广Java做了很多努力。它的部分营销策略是冠以Java 2的名称,实际上就是JDK 1.2。Java 2有三种版本:
  Java 2 Platform,标准版(J2SE)。J2SE其实相当于JDK。它也是J2EE中所定义的各种技术的基础。
  Java 2 Platform,企业版(J2EE)。它为开发基于组件的多层企业应用程序定义了标准。功能包括Web Services特性支持和开发工具(SDK)。
  Java 2 Platform,移动版(J2ME)。它为在消费者设备上运行的应用程序提供了一种环境,如移动电话、掌上电脑(PDA),以及电视机顶盒等。J2ME包括一个JVM和有限的几组类库。
  在版本5中出现了名称的变化。J2SE变成了Java Platform,Standard Edition 5(Java SE 5)。而且J2EE和J2ME中的“2”也去掉了。企业版的当前版本是Java Platform,Enterprise Edition 6(Java EE 6)。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)是一系列规范,这些规范定义了在发布时需要实现的各种特性。软件本身称做参考实现(Reference Implementation)。Oracle、IBM和其他公司一起,通过OpenJDK提供了Java SE 7参考实现,以及Java后续版本的参考实现。
  Java EE 6也属于规范,其中包含像Servlet、JavaServer Pages、JavaServer Faces、Java Messaging Service等技术。为了开发和运行J2EE和Java EE 6应用程序,还需要一个J2EE/Java EE 6应用服务器(application server)。任何人都可以实现一个J2EE/Java EE 6应用服务器。这说明市场上各种应用服务器很容易获取到,其中包括一些开源的应用服务器。下面列举了一些J2EE/Java EE 6应用服务器的例子:
  Oracle公司的WebLogic(之前BEA的WebLogic)
  IBM公司的WebSphere
  Sun公司的Sun Java Application Server
  Oracle公司的10g Application Server
  GlassFish
  JBoss
  Jonas
  Apache Geronimo
  JBoss、GlassFish、Jonas以及Geronimo都是开源的应用服务器。不过它们有不同的许可要求,因此在决定使用这些产品之前,一定要确保先读过许可内容。
Java社区进程程序
  Java之所以能够持续成为技术首选,有很大一部分要归功于Sun公司的策略,它允许其他行业的人士参与决定Java的未来。这使得很多人都觉得Java也属于他们每一个人。许多大公司(如IBM、Oracle、Nokia、Fujitsu等)都大力投资Java,因为它们也可以为某一种技术提出一种规范,并将它们想要的技术放到Java技术的下一个版本中。这种协同工作正是采用了Java社区进程(Java Community Process,JCP)程序的形式。它的网址是http://www.jcp.org。
  由JCP程序提出的规范,就是大家所熟悉的Java Specification Requests(JSR)。例如JSR 336定义了Java SE 7。
面向对象编程概述
  面向对象编程(Object-Oriented Programming,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语言之一。例如,你不需要操心指针,不必浪费宝贵的时间去解决因没有销毁不用的对象而导致的内存泄漏等。此外,在它们早期的版本中,还提供了非常全面的类库,并且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章讲解在使用数字和日期时要处理的三个问题:解析、格式化和操作。该章介绍可以帮助你完成这些任务的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程序员感到庆幸的是,JDBC(Java Database Connectivity)技术为访问数据库提供了统一的方法。JDBC将在第22章讨论。
  线程是指操作系统分配处理器时间的一个基本处理单元,在一个进程里面可以有不止一个线程在执行代码。第23章说明在Java中多线程编程并不是只有专家级程序员才能做到。
  第24章是本书中关于多线程编程的第二章。这里介绍了能使多线程编程变得更加容易的接口和类。
  第25章讲解Java应用程序的用户可以如何限制运行Java应用程序,以及可以如何利用加密术来保护应用程序和数据的安全。
  第26章探讨Servlet技术和Servlet API,并举了几个例子。
  第27章介绍另一种Web开发技术,并讲解如何编写JSP页面。
  第28章介绍javadoc工具,Java程序员可以用它为API产生文档。
  第29章介绍Java Web Start,以及如何用它将Java应用程序部署到互联网、局域网,甚至如何从CD进行部署。
  附录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。它也为这些平台提供了64位的版本。还要注意的是,这个链接还提供JRE。不过,对于开发而言,你更需要JDK,而非JRE,后者只适合于运行编译过的Java类。JDK包括JRE。
  下载JDK之后,还要安装它。不同的操作系统的安装方法各不相同。下面将详细介绍各安装过程。
在Windows上安装
  Windows的安装比较简单,只要双击所下载的可执行文件图标,再按照说明进行安装即可。图I.3展示了安装向导的第一个对话框。

图I.3 在Windows上安装JDK
在Linux上安装
  在Linux平台上,可以获取到两种格式的JDK安装介质:
  RPM,适用于能够支持RPM包管理系统的Linux平台,如Red Hat和SuSE。
  自解压缩包。这是一个包含待安装包的压缩文件。
  如果正在使用RPM,则要遵循以下步骤:
  1)用su命令切换成root用户。
  2)解压缩已下载的文件。
  3)将当前工作路径换成已下载文件所在的位置,并运行chmod命令更改文件的执行权限:
  chmod a+x rpmFile
  4)运行RPM文件:
  ./rpmFile
  如果正在使用自解压缩的二进制安装,则需遵循以下步骤:
  1)解压缩已下载的文件。
  2)用chmod为该文件提供执行权限:
  chmod a+x binFile
  这里的binFile是为平台下载的bin文件。
  3)将当前工作路径换成要安装这些文件的位置。
  4)运行自解压二进制。将路径加到下载的文件名前面来执行它。例如,如果文件是在当前目录下,就在它前面加上“./”(如果PATH环境变量中没有包含“.”,这种做法就是必需的):
  ./binFile
设置系统环境变量
  安装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值的结尾处。这个路径就像下面这样:
  C:\Program Files\Java\jdk1.7.0_\bin
  5)单击“设置”(Set)→“确定”(OK)或“应用”(Apply)按钮。
  在UNIX和Linux上设置PATH环境变量
  根据所使用的shell,在这些操作系统上设置PATH环境变量。
  对于C shell,要在~/.cshrc文件之后添加以下内容:
  set path=(path/to/jdk/bin $path)
  这里的path/to/jdk/bin是指JDK安装目录下的bin目录。
  如果是Bourne Again shell,则要在~/.bashrc或者~/.bash_profile文件之后添加下面这行代码:
  export PATH=/path/to/jdk/bin:$PATH
  这里的path/to/jdk/bin是指JDK安装目录下的bin目录。
安装测试
  为了确认你已经正确地安装了JDK,可以在电脑的任何目录的命令行中输入javac。如果你看过如何正确运行javac的说明文档,那么你应该已经安装成功了。另外,如果你只能从JDK安装目录的bin目录下运行javac,那么你的PATH环境变量就还没有配置好。
Macintosh的JDK 7
  Apple公司的网站上提供了JDK 7之前的版本(http://support.apple.com/downloads)。之前Apple公司一直在发布和维护适用于Mac的JDK版本,但最后更新完JDK 6之后就不再这么做了,而是通过OpenJDK来推出适用于Mac的JDK。
  Mac的JDK 7可以在以下网址下载:
  http://openjdk.org/projects/macosx-port/
  令人遗憾的是,在编写本书之时,还没有二进制的版本可供下载和安装。不过,别泄气。因为另外一项项目已经启动,它可以为Macintosh提供能够马上安装的JDK 7。在以下网址下载一个DMG文件:
  http://code.google.com/p/openjdk-osx-build/
  这个二进制版本可以在Snow Leopard(10.6)和Lion(10.7)上运行,但是不能在OS/X之前的版本上运行。
下载Java API文档
  在用Java编程时,你肯定需要用到核心类库中的类。即使资深的Java程序员,他们在编程过程中也需要从文档中查看那些类库。因此,你应该从以下网址下载文档:
  http://www.oracle.com/technetwork/java/javase/downloads/index.html
  (你需要向下移动滚动条,直到看到“Java SE 7 Documentation”为止。)
  以下网址还提供了在线API文档:
  http://download.oracle.com/javase/7/docs/api
  下载程序范例和答案
  本书配套的程序范例和针对每章中的问题的解答可以从下面这个URL下载:
  http://books.brainysoftware.com/download/java7Beginners3rdEd.zip
  将这个zip文件解压缩到一个工作目录下。

上架指导

计算机\程序设计

封底文字

连续4年持续一周销量前10名!
Java是一门容易学习的语言。然而,要成为一名专业的Java程序员,仅掌握该语言的语法是远远不够的。面向对象编程(OOP)技有助于开发健壮和有效的Java应用程序,掌握如何使用大量类库集合使得开发更迅速。
本书介绍重要的编程概念,并涵盖Java SE 7,通俗易懂,全面而且系统性强,是初学者学习Java的入门经典。
本书主要内容:
 Java语言语法
 面向对象编程
 集合架构
 使用成员和日期
 错误处理
 输入输出
 泛型
 注解
 Swing
 数据库访问
 国际化
 网络
 Applet
 多线程和并发工具
 Servlet and JavaServer 页面
 API 文档
 安全性
 应用部署

作者简介

(加)Budi Kurniawan 著:作者简介 Budi Kurniawan,世界知名的Java专家和资深Java EE高级架构师,自己创建了软件咨询和技术出版公司Brainy Software。他还撰写了深入揭示Tomcat工作原理和设计理念的名著《深入剖析Tomcat》,并在多种权威出版物上发表过100多篇文章,同时编写大小型企业授权的软件

译者简介

俞黎敏 徐周乐 俞哲皆 等译:暂无简介

译者序

本书作者Budi Kurniawan是BrainySoftware.com的高级架构师,也是《How Tomcat Works》等经典著作的作者。本书是系统讲解Java 7的一部难得作品,它既适合没有Java技术开发经验的读者系统地学习Java开发相关的知识,又适合有一定的Java开发经验,但是希望能掌握最新的Java 7技术的读者。
  本书包含三个方面的内容:Java编程语言、Java面向对象编程和Java核心类库。无论是对于桌面应用,还是Web应用,它都为构建真实的应用程序提供了很好的指导。本书是你所能找到的最全面的Java 7程序设计教程,其主题有:Java语言的语法、面向对象编程、集合框架、数字和日期的处理、错误处理、输入和输出、泛型(generic)、注解(annotation)、Swing、数据库访问、国际化、网络化、Applet、多线程和并发工具、Servlet和JSP、API文档、安全性、应用程序开发。
  正如在翻译过程中发现原著的错误一样,虽然我们在翻译过程中竭力以求信、达、雅,但限于自身水平,必定仍会有诸多不足,还望各位读者不吝指正。大家可以通过访问我的博客 http://YuLimin.ItEye.com 或者发送电子邮件到 YuLimin@163.com 进行互动。
  关于术语的翻译,仍然沿用翻译Effective Java中文第2版时采用的术语表以及满江红开放技术研究组织翻译术语,请见http://yulimin.iteye.com/blog/272088。
  感谢崔毅(http://cuiyi.javaeye.com/)对我在翻译中碰到的问题进行的深入讨论,并对本书翻译时所采用的术语进行了认真的磋商;感谢“满江红开放技术研究组织”的翻译同仁们在术语表讨论中提出许多中肯的建议;感谢满江红开源组织的曹晓钢提供的一些翻译注意事项和热情的帮助;感谢机械工业出版社华章分社的编辑悉心地审读和认真地编辑,辛苦了,谢谢你们!
  本书由我组织翻译,徐周乐负责翻译第1~15章,俞哲皆负责翻译第16~26章,我负责翻译前言、第27~29章、附录并对全书所有章节进行全面审校,还负责对原文中的错误与作者进行沟通并加以修正。参与翻译等工作的人员还有:杨春花、崔毅、张琬滢、蒋凌锋、魏伟、万国辉等,在此再次向他们深表感谢。
  本书章节安排合理,内容承上启下,但是需要边看书边动手做实验,才能充分理解并掌握Java技术及新特性。可以利用本书附带的示例程序进行练习与实践。示例与答案下载地址为:http://books.brainysoftware.com/download/java7Beginners3rdEd.zip。
  快乐分享,实践出真知,最后,祝大家能够像我一样在阅读中享受本书带来的乐趣!
Read a bit and take it out, then come back read some more.

俞黎敏

图书目录

译者序
前 言
第1章 初识Java1
1.1 第一个Java程序1
1.1.1 编写Java程序1
1.1.2 编译Java程序1
1.1.3 运行Java程序2
1.2 Java编码规范2
1.3 集成开发环境(IDE)3
1.4 小结4
习题4
第2章 语言基础5
2.1 ASCII和Unicode5
2.2 分隔符7
2.3 基本类型7
2.4 变量8
2.5 常量10
2.6 字面量11
2.6.1 整数字面量11
2.6.2 浮点字面量12
2.6.3 布尔字面量13
2.6.4 字符字面量13
2.7 基本类型转换14
2.7.1 扩大转换14
2.7.2 缩小转换15
2.8 操作符15
2.8.1 一元操作符16
2.8.2 算术操作符18
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语句30
3.5 for语句31
3.6 break语句34
3.7 continue语句35
3.8 switch语句35
3.9 小结36
习题36
第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 关键字null43
4.5 内存中的对象43
4.6 Java包46
4.7 封装和访问控制47
4.7.1 类访问控制修饰符47
4.7.2 类成员访问控制修饰符49
4.8 关键字this51
4.9 使用其他类52
4.10 final变量53
4.11 静态成员54
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 小结64
习题65
第5章 核心类66
5.1 java.lang.Object66
5.2 java.lang.String67
5.2.1 比较两个String对象68
5.2.2 字符串字面量69
5.2.3 字符转义69
5.2.4 switch中的String 69
5.2.5 String类的构造器70
5.2.6 String类的方法71
5.3 java.lang.StringBuffer和java.lang.StringBuilder73
5.3.1 StringBuilder类的构造器73
5.3.2 StringBuilder类的方法74
5.4 基本类型包装74
5.4.1 java.lang.Integer75
5.4.2 java.lang.Boolean75
5.4.3 java.lang.Character76
5.5 数组76
5.5.1 迭代数组78
5.5.2 修改数组大小78
5.5.3 将String数组传递给main80
5.6 java.lang.Class80
5.7 java.lang.System81
5.8 java.util.Scanner85
5.9 装箱和拆箱85
5.10 可变参数85
5.11 格式和printf方法86
5.12 小结87
习题87
第6章 继承88
6.1 继承概述88
6.1.1 关键字extends88
6.1.2 is-a关系89
6.2 可访问性90
6.3 方法覆盖91
6.4 调用超类的构造器92
6.5 调用超类的隐藏成员94
6.6 类型转换94
6.7 Final类95
6.8 关键字instanceof95
6.9 小结96
习题96
第7章 错误处理97
7.1 捕捉异常97
7.2 没有catch的try99
7.3 捕捉多个异常99
7.4 try-with-resources语句99
7.5 java.lang.Exception类100
7.6 从方法抛出异常101
7.7 用户自定义的异常102
7.8 异常处理总结103
7.9 小结104
习题104
第8章 数字和日期105
8.1 数字解析105
8.2 数字格式化106
8.3 用java.text.NumberFormat解析数字107
8.4 java.lang.Math类107
8.5 java.util.Date类108
8.6 java.util.Calendar类109
8.7 用DateFormat进行日期解析和格式化110
8.7.1 DateFormat110
8.7.2 SimpleDateFormat111
8.8 小结112
习题112
第9章 接口和抽象类113
9.1 接口的概念113
9.2 从技术角度看接口114
9.2.1 接口中的域115
9.2.2 方法115
9.3 基类116
9.4 抽象类117
9.5 小结118
习题118
第10章 枚举119
10.1 枚举概述119
10.2 类中的枚举120
10.3 java.lang.Enum类121
10.4 迭代枚举值121
10.5 枚举在switch中的应用121
10.6 小结122
习题122
第11章 集合框架123
11.1 集合框架概述123
11.2 Collection接口124
11.3 List和ArrayList124
11.4 用Iterator和for迭代集合126
11.5 Set和HashSet127
11.6 Queue和LinkedList128
11.7 集合转换129
11.8 Map和HashMap129
11.9 对象比较和排序130
11.9.1 使用java.lang.Comparable130
11.9.2 使用Comparable和Comparator133
11.10 小结136
习题136
第12章 泛型137
12.1 没有泛型的生活137
12.2 泛型类型简介138
12.3 使用没有类型参数的泛型类型140
12.4 使用“ ”通配符141
12.5 在方法中使用有界通配符143
12.6 编写泛型类型144
12.7 小结145
习题145
第13章 输入/输出146
13.1 文件系统和路径147
13.2 文件和目录的处理及操作148
13.2.1 创建和删除文件及目录148
13.2.2 获取目录的对象149
13.3.3 复制和移动文件149
13.2.4 文件读取和写入150
13.3 输入/输出流152
13.4 读取二进制数据152
13.5 写入二进制数据156
13.6 写入文本(字符)159
13.6.1 Writer159
13.6.2 OutputStreamWriter160
13.6.3 PrintWriter161
13.7 读取文本(字符)163
13.7.1 Reader163
13.7.2 InputStreamReader163
13.7.3 BufferedReader165
13.8 用PrintStream记录日志166
13.9 随机访问文件167
13.10 对象序列化171
13.11 小结173
习题173
第14章 嵌套类和内部类174
14.1 嵌套类概述174
14.2 静态的嵌套类175
14.3 成员内部类176
14.4 局部内部类178
14.5 匿名内部类179
14.6 深入嵌套类和内部类180
14.7 小结182
习题183
第15章 Swing基础知识184
15.1 AWT组件185
15.2 有用的AWT类187
15.2.1 java.awt.Color187
15.2.2 java.awt.Font187
15.2.3 java.awt.Point187
15.2.4 java.awt.Dimension188
15.2.5 java.awt.Rectangle188
15.2.6 java.awt.Graphics188
15.2.7 java.awt.Toolkit188
15.3 基础的Swing组件189
15.3.1 JFrame189
15.3.2 调整尺寸和定位192
15.3.3 扩展JFrame194
15.3.4 JComponent195
15.3.5 Icon和ImageIcon196
15.3.6 JLabel196
15.3.7 JButton198
15.3.8 JTextField和JPasswordField199
15.3.9 JTextArea201
15.3.10 JCheckbox202
15.3.11 JRadioButton203
15.3.12 JList205
15.3.13 JComboBox206
15.3.14 JDialog207
15.3.15 JOptionPane210
15.3.16 JFileChooser214
15.4 小结216
习题217
第16章 Swing高级知识218
16.1 布局管理器218
16.1.1 BorderLayout219
16.1.2 FlowLayout221
16.1.3 BoxLayout222
16.1.4 GridLayout223
16.1.5 不用LayoutManager224
16.2 事件处理225
16.2.1 Java事件模型225
16.2.2 Swing事件处理226
16.2.3 AWT事件API228
16.3 使用菜单239
16.4 外观240
16.5 快速启动画面242
16.6 系统托盘支持244
16.7 桌面助手应用程序246
16.8 小结250
习题250
第17章 多态251
17.1 定义多态251
17.2 多态实战254
17.3 绘图应用程序中的多态254
17.4 多态和反射259
17.5 小结261
习题261
第18章 注解262
18.1 注解概述262
18.1.1 注解和注解类型262
18.1.2 注解语法263
18.1.3 注解接口263
18.2 标准注解264
18.2.1 Override264
18.2.2 Deprecated264
18.2.3 SuppressWarnings266
18.3 一般注解267
18.4 标准元注解267
18.4.1 Documented267
18.4.2 Inherited268
18.4.3 Retention268
18.4.4 Target268
18.5 定制注解类型269
18.5.1 编写自己的定制注解类型269
18.5.2 使用定制注解类型269
18.5.3 用反射查询注解270
18.6 小结271
习题271
第19章 国际化272
19.1 Locale272
19.2 应用程序国际化274
19.2.1 将文本组件单独放进属性文件274
19.2.2 用ResourceBundle读取属性文件275
19.3 将Swing应用程序国际化275
19.4 小结277
习题277
第20章 Applet278
20.1 Applet历史简介278
20.2 Applet API279
20.2.1 Applet类279
20.2.2 AppletContext接口281
20.2.3 AudioClip接口281
20.2.4 AppletStub接口282
20.3 安全限制282
20.4 编写和部署applet282
20.5 AppletViewer工作原理284
20.6 将参数传递给Applet285
20.7 SoundPlayerApplet288
20.8 JApplet289
20.9 在JAR文件中部署Applet290
20.10 更快速加载290
20.11 小结291
习题291
第21章 Java网络292
21.1 网络概述292
21.2 超文本转移协议(HTTP)293
21.2.1 HTTP请求293
21.2.2 HTTP响应294
21.3 java.net.URL295
21.3.1 解析URL295
21.3.2 读取Web资源296
21.4 java.net.URLConnection297
21.4.1 读取Web资源298
21.4.2 把数据写入Web服务器300
21.5 java.net.Socket300
21.6 java.net.ServerSocket302
21.7 一个Web服务器应用程序303
21.7.1 HttpServer类303
21.7.2 Request类306
21.7.3 Response类308
21.7.4 运行应用程序310
21.8 小结311
习题311
第22章 JDBC312
22.1 JDBC简介312
22.2 数据访问的4个步骤313
22.2.1 加载JDBC驱动程序313
22.2.2 获得数据库连接314
22.2.3 创建Statement对象315
22.2.4 创建一个ResultSet对象316
22.3 关闭JDBC对象317
22.4 读取元数据318
22.5 SQLTool示例318
22.6 小结323
习题323
第23章 Java线程324
23.1 Java线程简介324
23.2 创建线程324
23.2.1 扩展线程326
23.2.2 实现Runnable接口327
23.3 使用多线程327
23.4 线程优先级329
23.5 停止线程330
23.6 同步333
23.6.1 线程冲突333
23.6.2 方法同步334
23.6.3 块同步 335
23.7 可见性336
23.8 线程协调338
23.9 使用Timer342
23.10 Swing Timer344
23.11 小结346
习题346
第24章 并发工具347
24.1 原子变量347
24.2 Executor和ExecutorService348
24.3 Callable和Future351
24.4 Swing Worker354
24.5 锁357
24.6 小结359
习题359
第25章 安全360
25.1 Java安全概述360
25.2 使用安全管理器361
25.3 策略文件362
25.3.1 keystore363
25.3.2 grant363
25.4 权限364
25.4.1 java.io.FilePermission365
25.4.2 java.security.BasicPermission365
25.4.3 java.util.PropertyPermission365
25.4.4 java.net.SocketPermission365
25.4.5 java.security.Unresolved-Permission366
25.4.6 java.lang.RuntimePermission366
25.4.7 java.awt.AWTPermission366
25.4.8 java.net.NetPermission367
25.4.9 java.lang.reflect.Reflect-Permission367
25.4.10 java.io.Serializable-Permission367
25.4.11 java.security.Security-Permission367
25.4.12 java.security.AllPermission367
25.4.13 javax.security.auth.Auth-Permission367
25.5 使用Policy Tool368
25.6 Applet安全369
25.7 安全编程370
25.8 加密概述370
25.8.1 加密/解密371
25.8.2 验证372
25.8.3 数据完整性374
25.8.4 SSL工作原理374
25.9 创建证书375
25.10 KeyTool程序375
25.10.1 生成配对的密钥376
25.10.2 进行认证377
25.10.3 将证书导入密钥库377
25.10.4 从密钥库中导出证书378
25.10.5 列出密钥库条目378
25.11 JarSigner工具378
25.11.1 签署JAR文件378
25.11.2 验证已签署的JAR文件379
25.11.3 范例:签署一个Applet379
25.12 Java Cryptography API382
25.13 小结382
习题382
第26章 Java Web应用程序383
26.1 Servlet应用程序架构383
26.2 Servlet API概述384
26.3 Servlet385
26.4 编写基础的Servlet应用程序386
26.4.1 安装Tomcat386
26.4.2 编写和编译Servlet类386
26.4.3 应用程序目录结构388
26.4.4 访问Servlet389
26.5 ServletRequest389
26.6 ServletResponse390
26.7 ServletConfig390
26.8 ServletContext393
26.9 GenericServlet393
26.10 HTTP Servlet395
26.10.1 HttpServlet395
26.10.2 HttpServletRequest396
26.10.3 HttpServletResponse397
26.10.4 编写一个Http Servlet397
26.11 使用部署描述符401
26.12 小结403
习题404
第27章 JavaServer Pages405
27.1 JSP概述405
27.2 jspInit、jspDestroy及其他方法407
27.3 隐式对象408
27.4 JSP语法元素409
27.4.1 指令409
27.4.2 脚本元素411
27.5 处理错误413
27.6 小结414
习题414
第28章 Javadoc415
28.1 在Java类中编写文档416
28.1.1 @author416
28.1.2 {@code}417
28.1.3 {@docRoot}417
28.1.4 @deprecated417
28.1.5 @exception417
28.1.6 {@inheritDoc}417
28.1.7 {@link}418
28.1.8 {@linkplain}418
28.1.9 {@literal}418
28.1.10 @param418
28.1.11 @return419
28.1.12 @see419
28.1.13 @serial419
28.1.14 @serialData420
28.1.15 @serialField420
28.1.16 @since420
28.1.17 @throws420
28.1.18 {@value}420
28.1.19 @version421
28.2 Javadoc语法421
28.2.1 Javadoc选项422
28.2.2 标准Doclet选项423
28.2.3 生成文档424
28.3 小结425
习题425
第29章 应用程序部署426
29.1 JWS概述426
29.2 JNLP文件语法426
29.2.1 jnlp元素427
29.2.2 information元素428
29.2.3 security元素429
29.2.4 resources元素429
29.2.5 application-desc元素429
29.2.6 applet-desc元素429
29.3 部署范例430
29.4 安全关注点432
29.5 小结433
习题433
附录A javac434
附录B java439
附录C jar444
附录D NetBeans448
附录E Eclipse452

教学资源推荐
作者: 朱恺 吉逸 方宁生 编著
作者: (美)Joseph Phillips 著
作者: 刘艺 王春生 等编
作者: 教育部高等学校计算机类专业教学指导委员会 智能时代计算机专业系统能力培养研究组 编制
参考读物推荐
作者: [美] 特拉维斯·鲁德米克(Travis Lowdermilk) 杰茜卡·里奇(Jessica Rich) 著
作者: 华诚科技 编著