科技>计算机>编程语言
Java面向对象编程

Java面向对象编程"

作者:孙卫琴编著
ISBN:9787121025389
定价:¥65.8
字数:1030千字
页数:625
出版时间:2006-07
开本:16(188*260)
版次:重印
装帧:
出版社:电子工业出版社
简介

本书由浅入深,与实际应用紧密结合,利用大量典型形象的实例,详细讲解Java面向对象的编程思想、编程语法和设计模式,介绍常见Java类库的用法,总结优化Java编程的各种宝贵经验,深入阐述Java虚拟机执行Java程序的原理。本书的范例都基于最新的JDK 1.5版本。本书内容包括:面向对象的编程思想、Java语言的基础知识、异常处理、类与对象的生命周期、多线程、Java集合、输入/输出和GUI编程等。本书的最大特色是以六条主线贯穿全书:面向对象编程思想、Java语言的语法、Java虚拟机执行Java程序的原理、在实际项目中的运用、设计模式和性能优化技巧。另外,本书还贯穿了Sun公司的SCJP(Sun Certified Java Programmer)认证的考试要点。书中实例源文件请到http://www.fecit.com.cn的“下载专区”下载。

前言

“开发专家之Sun ONE”全新提升为“Java开发专家”系列 —源自精品 成就理想 出 版 说 明 ★ 从“开发专家之Sun ONE”到“Java开发专家” “开发专家之Sun ONE”系列丛书从诞生之日至今,已经四岁了。在这个系列里面,我们一直努力体现着这么一个理念:用一种较为敏锐的视角来跟踪IT技术的发展轨迹,并把可能为广大程序员所希望获得的知识,用图书出版的方式奉献给大家。 在这个系列中,我们陆续出版了约30种图书,有《Java与模式》、《JSP应用开发详解(第二版)》、《精通EJB(第三版)》、《Tomcat与Java Web应用开发详解》、《精通Struts:基于MVC的Java Web设计与开发》、《JBoss管理与开发核心技术(第三版)》、《精通Spring》、《精通Hibernate:Java对象持久化技术详解》等一大批读者朋友耳熟能详的作品。很多作品都是在国内没有同类图书的情况下出版的。在这几年的出版工作中,我们时刻感受着市场的风险,也时刻收获着无数读者给我们的认可。 在这个系列中,凝聚了大量资深技术专家的心血。有大家都熟知的阎宏、刘晓华、孙卫琴、罗时飞等,还有一些正在不断腾跃的开发高手。这些非常优秀的国内原创作者们一直都在支持着“开发专家之Sun ONE”系列的出版工作,在这里,我们要向他们说声:谢谢。 桃李不言,下自成蹊。由于这些年“开发专家之Sun ONE”在“两个效益”中的杰出表现,电子工业出版社授予这个系列“最佳品牌奖”。 时代不断前进,技术不断变革。为了顺应Java领域的技术发展态势,为了赋予这个经典的图书系列更强的生命力,我们将“开发专家之Sun ONE”升级为“Java开发专家”。我们将继承原有的出版理念,紧密跟踪技术热点和发展趋势,会聚更多优秀作者,全力奉献更经典的作品。 ★ 规划你的Java开发之路 喜马拉雅山脉的最高峰不断地在温室效应中降低,而Java世界的颠峰永远都在技术人员的追求中不断升高。每个人都有不同的路,每个人都有不同的行路方式,不过,往往“到了山顶才发现,错误的路和正确的路就差那么几步!” 身处Java洪流中的程序员最累(不过大家都说Java程序员薪水最高,呵呵),我们简单整理了一下Java领域的相关技术、工具、架构,如下图所示。这个框图中的每一个英文单词(或缩写)都可以写成一本书。Java领域还有一个特点,那就是商业产品和开源产品层出不穷,潮流不断。相比于其他领域,如.NET,Java开发更是体现了这句谚语:条条大路通罗马。 罗马只有一个,大路却有多条。看上去,似乎到罗马很容易,反正路多嘛。不过,路多却容易迷失方向。当你在Java领域中摸爬滚打几年后,发现自己在无数条道路上走了很久,却不知道罗马何日才能到达,甚至连罗马的方向都不知道,这时你肯定会很失落。 很遗憾,在这个简短的出版说明文章里面,我们无法告诉你每一条连贯的、不费周折的通往罗马的道路该如何走。或许,通过“Java开发专家”系列中的某本书,你可以找到属于你的正确道路。在一般情况下,我们不会就某一项很窄的话题来单独写一本书,我们还是希望通过我们的一些专业和智慧,尽力把一些相关技术整合起来,用较为简明的方式表达出来,最后由你来选择。 这里有句话与大家共勉:少走弯路,就是捷径! ★ “Java开发专家”的奉献 犹如在上面那个框图中展现的那样,我们希望在各个层面、各个方向上都能给读者奉献出优秀的图书作品,全面体现技术与应用的结合。从宏观上看,我们会从语言、IDE、环境、数据库、架构与应用、安全、项目与测试等方面进行选择,选出一些读者迫切需要的技术来先行规划。 “Java开发专家”虽然新蓓初绽,但因其源自盛放的“开发专家之Sun ONE”系列而根基稳健,两个系列会有一段很长的并行时间,我们会用一种优化的方式来保证读者的顺利选择。无论哪一个系列,必定都有大家喜欢的图书。 在技术上,有着持久化的方法,在学习上,也需要有持久化的精神。 从“开发专家之Sun ONE”到“Java开发专家”,希望可以带给你持久化的动力。 联系方式 咨询电话:(010)68134545 88254160 电子邮件:support@fecit.com.cn 服务网址:http://www.fecit.com.cn http://www.fecit.net 通用网址:计算机图书、飞思、飞思教育、飞思科技、FECIT 前言 Java自1996年正式发布以来,经历了出生、成长和壮大的阶段,现在已经成为IT领域里的主流编程语言。Java起源于Sun公司的一个叫“Green”的项目,目的是开发嵌入家用电器的分布式软件系统,使电器更加智能化。图P-1所示为参与Green项目的开发人员。Green项目一开始准备采用C++语言,但是考虑到C++语言太复杂,而且安全性差,于是决定基于C++语言开发一种新的Oak语言(即Java的前身)。 图P-1 参与Green项目的开发人员 Oak是一种适用于网络编程的精巧而安全的语言,它保留了许多C++语言的语法,但去除了明确的资源引用﹑指针算法与操作符重载等潜在的危险特性。并且Oak语言具有与硬件无关的特性,制造商只需要更改芯片,就可以将烤面包机上的程序代码移植到微波炉上或其他电器上,而不必改变软件,这就大大降低了开发成本。 当Oak语言成熟时,全球Internet也在迅速发展。Sun公司的开发小组认识到Oak非常适合于Internet编程。1994年,他们完成了一个用Oak语言编写的早期的Web浏览器,称为WebRunner,后改名为HotJava,展示了Oak作为Internet开发工具的能力。 1995年,Oak语言更名为Java语言(以下简称为Java)。Java的取名有一个趣闻。据说,有一天,几位Java成员组的会员正在讨论给这个新的语言取什么名字,当时他们正在咖啡馆喝着Java(爪哇)咖啡。有一个人灵机一动说,就叫Java怎样,这得到了其他人的赞赏。于是,Java这个名字就这样传开了。 1996年,Sun公司发布JDK 1.0,计算机产业的各大公司(包括IBM、Apple、DEC、Adobe、Silicon Graphics、HP、Oracle、Toshiba和Microsoft等)相继从Sun公司购买了Java技术许可证,开发相应的产品。 1998年,Sun公司发布了JDK 1.2(从这个版本开始的Java技术都称为Java 2)。Java 2不仅兼容于智能卡和小型消费类设备,还兼容于大型服务器系统,它使软件开发商、服务提供商和设备制造商更加容易抢占市场机遇。这一开发工具极大地简化了编程人员编制企业级Web应用的工作,把一次编程到处使用的诺言应用到服务器领域。 1999年,Sun公司把Java 2技术分成J2SE、J2EE和J2ME。其中J2SE就是指从1.2版本开始的JDK,它为创建和运行Java程序提供了最基本的环境。J2EE和J2ME建立在J2SE的基础上,J2EE为分布式的企业应用提供开发和运行环境,J2ME为嵌入式应用(比如运行在手机里的Java程序)提供开发和运行环境。 在进入21世纪以来,随着Web技术成为展示和操作数据的事实标准,企业利用J2EE平台对原来分散的子系统进行整合。尽管应用整合可以通过多种手段来实现,但J2EE在出现后,因其天生具备良好的开放性和可扩展性,使之在应用整合和开发的过程中发挥了愈来愈显著的优势。J2EE逐渐成为开发商创建电子商务应用的事实标准。 Java的公用规范(Publicly Available Specification,PAS)在1997年被国际标准化组织(ISO)认定,这是ISO第一次破例接受一个具有商业色彩的公司作为公用规范PAS的提交者。 总之,面向对象的Java语言具备一次编程、任何地方均可运行的能力,这使其成为服务提供商和系统集成商用以支持多种操作系统和硬件平台的首选解决方案。Java作为软件开发的一种革命性的技术,其地位已被确定。如今,Java技术已被列为当今世界信息技术的主流之一。表P-1对Java的发展历史做了总结。 表P-1 Java的发展历史 年 份 Java的发展历史 1995 Java语言诞生 1996 JDK 1.0发布,10个最主要的操作系统供应商申明将在其产品中支持Java技术 1997 JDK 1.1发布 1998 JDK 1.1下载量超过200万次,JDK 1.2(称Java 2)发布,JFC/Swing技术发布, JFC/Swing被下载了50多万次 1999 Java被分成J2SE、J2EE 和J2ME,JSP/Servlet技术诞生 2000 JDK 1.3发布,JDK 1.4发布 2001 Nokia公司宣布到2003年将出售1亿部支持Java的手机,J2EE 1.3发布 2002 J2SE 1.4发布,至此Java的计算能力有了大幅度提升。J2EE SDK的下载量达到200万次 2003 5.5亿台桌面机上运行Java程序,75%的开发人员将Java作为首要开发工具 2004 J2SE 1.5发布,这是Java语言在发展史上的又一里程碑事件。为了表示这个版本的重要性,J2SE 1.5更名为J2SE 5.0 2005 JavaOne大会召开,Sun公司公开Java SE6。此时,Java的各种版本被更名,取消其中的数字“2”:J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为Java ME。 Java语言的特点 Java应用如此广泛是因为Java具有多方面的优势。其特点如下: (1)面向对象。Java自诞生之时就设计成面向对象的语言,而C++语言是一种强制面向对象的语言。面向对象可以说是Java最重要的特性,它不支持类似C语言那样的面向过程的程序设计技术。Java支持静态和动态风格的代码重用。 (2)跨平台。对于Java程序,不管是Windows平台还是UNIX平台,或者其他平台,它都适用。Java编辑器把Java源程序编译成与体系结构无关的字节码指令,只要安装了Java运行系统,Java程序就可在任意的处理器上运行。这些字节码指令由Java虚拟机来执行,Java虚拟机的解释器在得到字节码后,对它进行转换,使之能够在不同的平台运行。 (3)直接支持分布式的网络应用。除了支持基本的语言功能以外,Java核心类库还包括一个支持HTTP、SMTP和FTP等基于TCP/IP协议的类库。因此,Java应用程序可凭借URL打开并访问网络上的对象,其访问方式与访问本地文件系统几乎完全相同。在Java出现以前,为分布式环境尤其是Internet提供动态的内容无疑是一项非常宏伟、难以想像的任务,但Java的语言特性却使我们很容易地达到这个目标。 (4)安全性和健壮性。Java致力于检查程序在编译和运行时的错误,类型检查能够帮助检查出许多开发早期出现的错误。Java 支持自动内存管理,这不但让程序员减轻了许多负担,也让程序员减少了犯错的机会。Java自己操纵内存减小了内存出错的可能性。Java还能够检测数组边界,避免了覆盖数据的可能。在Java语言里,指针和释放内存等功能均被抛弃,从而避免了非法内存操作的危险。 以上特点,是C++语言及其他语言无可比拟的(C++语言尽管也是面向对象的,但并不是严格意义上的面向对象语言)。单从面向对象的特性来看,Java类似于SmallTalk, 但其他特性,尤其是适用于分布式计算环境的特性远远超越了SmallTalk。Java发展到现在,已经不仅仅是一种语言,可以说是一种技术,这个技术涉及到网络和编程等领域。另外,Java是非常简单、高效的,有调查数据发现:用C++和Java来做一个相同功能的项目,用 Java写的程序要比用C++写的程序节省60%的代码和66%的时间。可以说,用Java语言编程时间短、功能强,编程人员接手起来更容易、更简便。 本书的组织结构和主要内容 本书以六条主线贯穿全书:面向对象编程思想、Java语言的语法、Java虚拟机执行Java程序的原理、在实际项目中的运用、设计模式和性能优化技巧。书中的每一章都会围绕若干条主线来展开内容,并且根据全书的布局,合理安排每一章内容的深度。本书主要内容包括:面向对象的开发方法概述、数据类型和变量、操作符、流程控制、继承、Java语言中的修饰符、接口、异常处理、类的生命周期、对象的生命周期、内部类、多线程与并发、数组、Java集合、输入输出、图形用户界面、Swing组件和Java常用类。 这本书是否适合你 在如今的Java领域,各种新技术、新工具层出不穷,一方面,每一种技术都会不停地升级换代;另一方面,还会不断涌现出新的技术和工具。Java世界就像小时候玩的万花筒,尽管实质上只是由几个普通的玻璃碎片组成,但只要轻轻一摇,就会变换出千万种缤纷的图案。Java世界如此变化多端,很容易让初学Java的人有无从下手的感觉。常常会有读者问我这样的问题: 我学了Java已经一年多了,现在就只能用JSP写点东西,其他的东西实在太多了,我整天学都学不完,很迷惘,不知道该如何有针对性地去学,去找到一份Java工作,现在是困死在Java里了。 撰写本书,目的是为了帮助读者看清Java万花筒的本质,从复杂的表象中寻找普遍的的规律,深刻理解Java的核心思想。只有掌握了普遍的规律与核心思想,才能以不变应万 变,轻轻松松地把握Java技术发展的新趋势,迅速地领略并且能熟练运用一门新的技术,而不成为被动的追随者,知其然而不知其所以然。 阅读本书,读者对Java的领悟将逐步达到以下境界: ● 熟悉Java语法,熟练地编译和调试程序。 ● 按照面向对象的思想来快速理解JDK类库及其他第三方提供的类库,通过阅读JavaDoc和相关文档,知道如何正确地使用这些类库。 ● 按照面向对象的思想来分析问题领域,设计对象模型。 ● 在开发过程中会运用现有的一些优秀设计模式,提高开发效率。 ● 当一个方法有多种实现方式时,能够从可维护、可重用及性能优化的角度选择最佳的实现方式。 ● 理解Java虚拟机执行Java程序的原理,从而更深入地理解Java语言的各种特性和语法规则。 致谢 本书在编写过程中得到了Sun公司在技术上的大力支持,飞思科技产品研发中心负责监制工作,复旦软件学院的MSE师生们为本书的编写提供了有益的帮助,JavaThinker网站的许多热心网友及作者的亲友,包括李洪成、李红军、李建伟、杨源、曹文伟、gogolong、lwy0329和fjchenq等为本书提供了宝贵的建议,在此表示衷心的感谢! 尽管我们尽了最大努力,但本书难免会有不妥之处,欢迎各界专家和读者朋友批评指正。

目录

第1章 面向对象开发方法概述 1 1.1 结构化的软件开发 方法简介 3 1.2 面向对象的软件开发 方法简介 5 1.2.1 对象模型 6 1.2.2 UML:可视化 建模语言 6 1.2.3 Rational Rose: 可视化建模工具 7 1.3 面向对象开发中的核心 思想和概念 7 1.3.1 问题领域、对象、属性、状 态、行为、方法、实现 7 1.3.2 类、类型 9 1.3.3 消息、服务 10 1.3.4 接口 11 1.3.5 封装、透明 12 1.3.6 抽象 16 1.3.7 继承、扩展、覆盖 17 1.3.8 组合 19 1.3.9 多态、动态绑定 22 1.4 UML语言简介 24 1.4.1 用例图 24 1.4.2 类框图 25 1.4.3 时序图 26 1.4.4 协作图 27 1.4.5 状态转换图 27 1.4.6 组件图 28 1.4.7 部署图 29 1.5 类之间的关系 29 1.5.1 关联(Association) 29 1.5.2 依赖(Dependency) 31 1.5.3 聚集(Aggregation) 31 1.5.4 泛化(Generalization) 32 1.5.5 实现(Realization) 32 1.5.6 区分依赖、关联和聚集关系 33 1.6 实现Panel系统 35 1.6.1 扩展Panel系统 37 1.6.2 用配置文件进一步提高Panel 系统的可维护性 39 1.6.3 运行Panel系统 40 1.7 小结 41 1.8 思考题 42 第2章 第一个Java应用 43 2.1 创建Java源文件 43 2.1.1 Java源文件结构 44 2.1.2 包声明语句 45 2.1.3 包引入语句 47 2.1.4 方法的声明 49 2.1.5 程序入口main()方法的声明 50 2.1.6 给main()方法传递参数 51 2.1.7 注释语句 51 2.1.8 关键字 51 2.1.9 标识符 52 2.1.10 编程规范 52 2.2 用JDK管理Java应用 53 2.2.1 JDK简介 54 2.2.2 编译Java源文件 55 2.2.3 运行Java程序 56 2.2.4 给Java应用打包 59 2.3 JavaDoc文档 60 2.3.1 JavaDoc标记 62 2.3.2 javadoc命令的用法 67 2.4 Java虚拟机的运行时数据区 69 2.5 小结 71 2.6 思考题 71 第3章 数据类型和变量 73 3.1 基本数据类型 74 3.1.1 boolean类型 74 3.1.2 byte、short、int和 long类型 75 3.1.3 char类型与字符编码 76 3.1.4 float和double类型 79 3.2 引用类型 83 3.2.1 基本类型与引用类型的 区别 84 3.2.2 用new关键字创建对象 85 3.3 变量的作用域 87 3.3.1 静态变量和实例变量的 生命周期 88 3.3.2 局部变量的生命周期 91 3.3.3 成员变量和局部变量同名 92 3.3.4 将局部变量的作用域 最小化 93 3.4 对象的默认引用:this 94 3.5 参数传递 96 3.6 变量的初始化及 默认值 98 3.6.1 成员变量的初始化 98 3.6.2 局部变量的初始化 99 3.7 直接数 100 3.7.1 直接数的类型 100 3.7.2 直接数的赋值 101 3.8 小结 103 3.9 思考题 104 第4章 操作符 107 4.1 操作符简介 107 4.2 整型操作符 108 4.2.1 一元整型操作符 109 4.2.2 二元整型操作符 110 4.3 浮点型操作符 115 4.4 比较操作符和逻辑操作符 116 4.5 三元操作符“?:” 119 4.6 字符串连接操作符“+” 119 4.7 操作符“==”与对象的 equals()方法 121 4.7.1 操作符“==” 121 4.7.2 对象的equals()方法 122 4.8 instanceof 操作符 125 4.9 变量的赋值和类型转换 127 4.9.1 基本数据类型转换 128 4.9.2 引用类型的类型转换 131 4.10 小结 131 4.11 思考题 134 第5章 流程控制 137 5.1 分支语句 138 5.1.1 if…else语句 138 5.1.2 switch语句 141 5.2 循环语句 144 5.2.1 while语句 145 5.2.2 do…while语句 146 5.2.3 for语句 147 5.2.4 多重循环 150 5.3 流程跳转语句 151 5.4 综合例子:八皇后问题 153 5.5 小结 156 5.6 思考题 157 第6章 继承 161 6.1 继承的基本语法 161 6.2 方法重载(Overload) 163 6.3 方法覆盖(Override) 165 6.4 方法覆盖与方法重载的 异同 170 6.5 super关键字 171 6.6 多态 172 6.7 继承的利弊和使用原则 177 6.7.1 继承树的层次不可太多 177 6.7.2 继承树的上层为抽象层 177 6.7.3 继承关系最大的弱点: 打破封装 178 6.7.4 精心设计专门用于 被继承的类 180 6.7.5 区分对象的属性与继承 181 6.8 比较组合与继承 183 6.8.1 组合关系的分解过程对应 继承关系的抽象过程 184 6.8.2 组合关系的组合过程对应 继承关系的扩展过程 186 6.9 小结 189 6.10 思考题 190 第7章 Java语言中的修饰符 195 7.1 访问控制修饰符 196 7.2 abstract修饰符 198 7.3 final修饰符 200 7.3.1 final类 201 7.3.2 final方法 201 7.3.3 final变量 202 7.4 static修饰符 206 7.4.1 static变量 206 7.4.2 static方法 209 7.4.3 static代码块 212 7.5 小结 214 7.6 思考题 215 第8章 接口 219 8.1 接口的概念和基本特征 220 8.2 比较抽象类与接口 222 8.3 与接口相关的设计模式 227 8.3.1 定制服务模式 227 8.3.2 适配器模式 231 8.3.3 默认适配器模式 235 8.3.4 代理模式 236 8.3.5 标识类型模式 241 8.3.6 常量接口模式 242 8.4 小结 243 8.5 思考题 244 第9章 异常处理 247 9.1 Java异常处理机制概述 248 9.1.1 Java异常处理机制的优点 248 9.1.2 Java虚拟机的方法调用栈 250 9.1.3 异常处理对性能的影响 253 9.2 运用Java异常处理机制 253 9.2.1 try…catch语句: 捕获异常 253 9.2.2 finally语句:任何情况下都 必须执行的代码 254 9.2.3 throws子句:声明可能会 出现的异常 256 9.2.4 throw语句:抛出异常 256 9.2.5 异常处理语句的语法规则 257 9.2.6 异常流程的运行过程 260 9.3 Java异常类 264 9.3.1 运行时异常 266 9.3.2 受检查异常 266 9.3.3 区分运行时异常和 受检查异常 267 9.3.4 区分运行时异常和错误 268 9.4 用户定义异常 268 9.4.1 异常转译和异常链 269 9.4.2 处理多样化异常 271 9.5 异常处理原则 273 9.5.1 异常只能用于非正常情况 273 9.5.2 为异常提供说明文档 274 9.5.3 尽可能地避免异常 275 9.5.4 保持异常的原子性 276 9.5.5 避免过于庞大的try 代码块 277 9.5.6 在catch子句中指定具体的 异常类型 277 9.5.7 不要在catch代码块中忽略 被捕获的异常 278 9.6 小结 278 9.7 思考题 279 第10章 类的生命周期 283 10.1 Java虚拟机及程序的 生命周期 283 10.2 类的加载、连接和初始化 283 10.2.1 类的加载 284 10.2.2 类的验证 285 10.2.3 类的准备 285 10.2.4 类的解析 286 10.2.5 类的初始化 286 10.2.6 类的初始化的时机 288 10.3 类加载器 291 10.3.1 类加载的父亲委托(Parent Delegation)机制 293 10.3.2 创建用户自定义的 类加载器 294 10.3.3 URLClassLoader类 300 10.4 类的卸载 301 10.5 小结 302 10.6 思考题 303 第11章 对象的生命周期 305 11.1 创建对象的方式 305 11.2 构造方法 308 11.2.1 重载构造方法 309 11.2.2 默认构造方法 310 11.2.3 子类调用父类的构造方法 311 11.2.4 构造方法的作用域 314 11.2.5 构造方法的访问级别 315 11.3 静态工厂方法 316 11.3.1 单例(singleton)类 317 11.3.2 枚举类 319 11.3.3 不可变(immutable)类与 可变类 321 11.3.4 具有实例缓存的 不可变类 325 11.3.5 松耦合的系统接口 327 11.4 垃圾回收 328 11.4.1 对象的可触及性 329 11.4.2 垃圾回收的时间 330 11.4.3 对象的finalize() 方法简介 331 11.4.4 对象的finalize() 方法的特点 331 11.4.5 比较finalize()方法和 finally代码块 334 11.5 清除过期的对象引用 334 11.6 对象的强、软、弱和 虚引用 336 11.7 小结 342 11.8 思考题 342 第12章 内部类 345 12.1 内部类的基本语法 345 12.1.1 实例内部类 346 12.1.2 静态内部类 349 12.1.3 局部内部类 351 12.2 内部类的继承 352 12.3 子类与父类中的 内部类同名 353 12.4 匿名类 354 12.5 内部接口及接口中的 内部类 357 12.6 内部类的用途 358 12.6.1 封装类型 358 12.6.2 直接访问外部类的成员 358 12.6.3 回调(CallBack) 359 12.7 内部类的类文件 361 12.8 小结 361 12.9 思考题 362 第13章 多线程 365 13.1 Java线程的运行机制 365 13.2 线程的创建和启动 367 13.2.1 扩展java.lang.Thread类 367 13.2.2 实现Runnable接口 372 13.3 线程的状态转换 373 13.3.1 新建状态(New) 373 13.3.2 就绪状态(Runnable) 374 13.3.3 运行状态(Running) 374 13.3.4 阻塞状态(Blocked ) 374 13.3.5 死亡状态(Dead) 375 13.4 线程调度 376 13.4.1 调整各个线程的优先级 377 13.4.2 线程睡眠:Thread.sleep() 方法 379 13.4.3 线程让步:Thead.yield() 方法 380 13.4.4 等待其他线程结束: join() 381 13.5 获得当前线程对象的 引用 382 13.6 后台线程 383 13.7 定时器Timer 384 13.8 线程的同步 386 13.8.1 同步代码块 389 13.8.2 线程同步的特征 392 13.8.3 同步与并发 395 13.8.4 线程安全的类 396 13.8.5 释放对象的锁 397 13.8.6 死锁 398 13.9 线程通信 400 13.10 中断阻塞 404 13.11 线程控制 405 13.11.1 被废弃的suspend()和 resume()方法 406 13.11.2 被废弃的stop()方法 407 13.11.3 以编程的方式控制线程 407 13.12 线程组 409 13.13 处理线程未捕获的异常 410 13.14 ThreadLocal类 412 13.15 小结 414 13.16 思考题 415 第14章 数组 417 14.1 数组变量的声明 417 14.2 创建数组对象 418 14.3 访问数组的元素和长度 419 14.4 数组的初始化 420 14.5 多维数组 421 14.6 调用数组对象的方法 422 14.7 把数组作为方法参数或 返回值 423 14.8 数组排序 425 14.9 数组的二叉查找算法 426 14.10 哈希表 428 14.11 数组实用类:Arrays 432 14.12 小结 434 14.13 思考题 435 第15章 Java集合 437 15.1 Collection和Iterator接口 438 15.2 Set(集) 440 15.2.1 Set的一般用法 441 15.2.2 HashSet类 442 15.2.3 TreeSet类 444 15.3 List(列表) 448 15.3.1 访问列表的元素 448 15.3.2 为列表排序 449 15.3.3 ListIterator接口 449 15.3.4 获得固定长度的List对象 450 15.3.5 比较Java数组和各种 List的性能 451 15.4 Map(映射) 453 15.5 HashSet和HashMap的 负载因子 455 15.6 集合的编译时类型检查 456 15.7 用for循环遍历集合 459 15.8 集合实用类:Collections 459 15.9 历史集合类 462 15.10 小结 465 15.11 思考题 466 第16章 Java I/O系统 467 16.1 输入流和输出流概述 467 16.2 输入流 469 16.2.1 字节数组输入流: ByteArrayInputStream类 470 16.2.2 文件输入流: FileInputStream类 471 16.2.3 字符串输入流: StringBufferInputStream类 472 16.2.4 管道输入流: PipedInputStream类 473 16.2.5 顺序输入流: SequenceInputStream类 474 16.3 过滤输入流: FilterInputStream类 474 16.3.1 装饰器设计模式 475 16.3.2 过滤输入流的种类 476 16.3.3 DataInputStream类 476 16.3.4 LineNumberInputStream类 478 16.3.5 BufferedInputStream类 478 16.3.6 PushbackInputStream类 478 16.4 输出流 479 16.4.1 字节数组输出流: ByteArrayOutputStream类 479 16.4.2 文件输出流: FileOutputStream类 480 16.5 过滤输出流: FilterOutputStream类 481 16.5.1 DataOutputStream类 481 16.5.2 BufferedOutputStream类 482 16.5.3 PrintStream类 483 16.6 Reader/Writer概述 485 16.7 Reader类 487 16.7.1 字符数组输入流: CharArrayReader类 488 16.7.2 字符串输入流: StringReader类 488 16.7.3 InputStreamReader类 489 16.7.4 FileReader类 490 16.7.5 BufferedReader类 490 16.8 Writer类 490 16.8.1 字符数组输出流: CharArrayWriter类 491 16.8.2 OutputStreamWriter类 491 16.8.3 FileWriter类 494 16.8.4 BufferedWriter类 494 16.8.5 PrintWriter类 494 16.9 标准I/O 495 16.9.1 重新包装标准输入和输出 495 16.9.2 标准I/O重定向 496 16.10 随机访问文件类: RandomAccessFile 497 16.11 新I/O类库 499 16.11.1 缓冲器Buffer概述 499 16.11.2 通道Channel概述 500 16.11.3 字符编码Charset类概述 502 16.11.4 用FileChannel读写文件 502 16.11.5 控制缓冲区 503 16.11.6 字符编码转换 504 16.11.7 缓冲区视图 505 16.11.8 文件映射缓冲区: MappedByteBuffer 507 16.11.9 文件加锁 508 16.12 对象的序列化与 反序列化 510 16.13 File类 515 16.13.1 查看、创建和删除 文件或目录 517 16.13.2 文件过滤器 519 16.14 小结 520 16.15 思考题 521 第17章 图形用户界面 523 17.1 AWT容器 523 17.2 布局管理器 525 17.2.1 FlowLayout流式布局 管理器 526 17.2.2 BorderLayout边界布局 管理器 528 17.2.3 GridLayout网格布局 管理器 530 17.2.4 CardLayout卡片布局 管理器 533 17.2.5 GridBagLayout网格包布局 管理器 535 17.3 事件处理 539 17.3.1 事件处理的软件实现 540 17.3.2 事件源﹑事件和监听器的 类层次和关系 545 17.4 AWT绘图 550 17.5 Graphics类 552 17.6 小结 554 17.7 思考题 554 第18章 Swing组件 557 18.1 Swing组件的基本用法 558 18.2 边框 559 18.3 按钮组件 561 18.4 文本框 564 18.5 文本区域与滚动面板 566 18.6 复选框与单选按钮 568 18.7 下拉列表 570 18.8 列表框 571 18.9 页签面板 573 18.10 菜单 574 18.11 对话框 579 18.12 文件对话框 581 18.13 消息框 584 18.14 绘图 585 18.15 JApplet 588 18.16 在JApplet中播放声音 594 18.17 BoxLayout布局管理器 596 18.18 设置Swing界面的外观和 感觉 599 18.19 小结 601 18.20 思考题 602 第19章 Java常用类 603 19.1 Object类 603 19.2 String类和StringBuffer类 604 19.2.1 String类 604 19.2.2 "hello"与new String("hello") 的区别 607 19.2.3 StringBuffer类 608 19.2.4 比较String类与StringBuffer 类 609 19.2.5 正则表达式 611 19.3 包装类 612 19.3.1 包装类的构造方法 613 19.3.2 包装类的常用方法 614 19.3.3 包装类的特点 615 19.4 Math类 616 19.5 Random类 617 19.6 处理日期的类 617 19.6.1 Date类 618 19.6.2 DateFormat类 618 19.6.3 Calendar类 620 19.7 BigDecimal类 621 19.8 小结 624 19.9 思考题 624 参考文献 626

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个