
本书针对Java 2平台标准版5.0,详细介绍了如何使用Java语言进行面向对象编程。较早地把有关面向对象的内容贯穿其中,使初学程序开发的读者们能够逐步体会并深刻理解“对象”技术的强大功能;较早地引入事件的处理与GUI的使用等,使学生们将逐步掌握GUI的创建。全书用两章的篇幅通过一个具体的实际应用程序实例讲述使用JDBC与SQL访问数据库的编程技术。通过多个详尽的实例分析,使学生尽快地掌握面向对象的编程技巧。此外,书中提供了大量与开发相关的技术要点,同时配合实用、有效的GUI应用程序,使读者能够迅速掌握并巩固所学到的知识。本书汲取了很多来自实际编程中的经验,这将为培养良好的编程习惯打下一个坚实的基础。
本书可作为高职高专计算机专业和高等技术型院校进行编程语言和Java教学的教材,也可供程序设计与开发人员参考。
Java面向对象程序设计当今,计算机技术发展迅猛,在各行各业的应用广泛。面对日新月异的新技术、新方法,我们必须对现有计算机课程的设置和教学内容进行调整,以适应技术进步与市场变化的需要,使教授的东西是市场上最需要的东西。
与其他语言相比,Java是一个较新的程序开发语言。目前,Java在全世界的许多商业环境中得到广泛的应用,是现今发展速度最快的程序开发语言之一。随着软件开发技术的发展,Java越来越受到人们的青睐,越来越多的企业都选择Java及其相关技术来构建它们的系统。因此,Java不仅是一门学习程序开发的好语言,还给人们提供了一门挑战性的技术。
学习一种先进的语言和一种先进的编程方法将激起学生更大的兴趣。这些知识在他们离开学校,进入一个由信息占据重要地位的世界时可以立即发挥作用。正是这一点激发了他们对知识的学习热情。运用Java能够出色地完成任务,所以他们更愿意投入更多的精力和时间。
很多院校都有软件专业的学生,有的学校的学生,在几年的学习时间中,不仅学了C、C++、 Java,而且也学了VB或VB.NET甚至C#,同时还学习了Web应用程序设计及其他有关软件开发的课程。但据作者的调查,仍然有些院校软件专业的学生在毕业时,很难找到一份对口的工作,他们的工作居然与软件无关,甚至与计算机无关。不是企业不需要软件专业的人才,而是没有所需要的人才。我认识一位学生,学习成绩不错,学习也很勤奋,在毕业前夕还通过了全国计算机技术与软件专业技术资格(水平)考试,获得软件设计师资格。但当我交给他一份实际任务时,他根本无从下手,尽管该任务很简单。这些都说明,我们的教学体系、教学内容、教学模式和方法都存在很多需要改进的地方。
在传统教学方法中,学生在学习某个知识点之前,首先需要学习和熟记一些基本的概念,然后在老师的讲解下学习相关的应用。虽然这种方法有助于学生奠定一定的理论基础,但由于其重理论而轻实践,而且各知识点之间以及各章之间的关联性较弱,所以使得学生在举一反三和知识的横向联系等方面能力较为欠缺,常常无法适应实际工作的需要。
本人也不赞成用“玩具程序示例”说明概念、原理的教学方法。这些例子完全脱离实际,看起来很幼稚,尽管它能够说明一个概念,学生也容易看懂,上课也容易听懂。但是检查学习好坏的标准,不是“知道还是不知道,听懂还是没有听懂,看懂还是没有看懂”,而是“会不会应用”。真实程序示例同样能够说明概念、原理和知识点。只不过是面对复杂的技术实践体系,需要花大量的时间、精力去设计这样的例程。只要设计得好,真实例程学生同样容易看懂、听懂,并且懂得在实际应用中如何运用这些概念、原理和知识点,起到事半功倍的效果。这就是本人编著本书的目标之一。
作者的目标很明确,即写一本实用、有一定的深度且易读的Java程序设计教材。无论读者有无编程经验,要做到开卷有益,重要的是能够激发他们的学习兴趣,能够将他们所学的知识应用于实际。
本书以培育技术应用人才为目标,将基本技能培养和主流技术相结合,以市场对人才的需求为依据,把软件工程的思想融入教材体系中,从应用与工程实践的角度出发进行组织编写,其主要特色如下:
Java面向对象程序设计1. 新体系、新内容、新手段、新思路。无论是内容体系、编写的思路、教学的模式及理念等都具有一定的新意。
2. 先进性及实用性。本书的内容反映最新的实用的程序设计方法及技术,并符合新世纪教学发展的规律,书中讲授的程序设计方法与现代编程方法步调一致,具有很强的实用性。
3. 以问题、模型为中心的教学方法和面向实际的应用程序驱动的教学方式。本书完全通过实例来学习,利用大量的完整实例,介绍相关的主题,而不是采用传统的“提出概念—解释概念—举例说明”的方法;以实践为主线,以应用为目标,通过完成实际的应用程序的方式学习程序设计知识。整个学习是由许多小的教学模块和任务组成。每个教学模块和任务首先提出一个来自实际的问题,学生首先可“探试”解决问题的应用程序以了解其工作过程,接着教师介绍解决问题的方法及步骤,并归纳出一般的规律、概念及知识点。随后学生参照教师的方法和步骤来解决问题,最后教师对学生提出一个新的实际问题,学生应用所学的方法和步骤来解决该问题。学生通过 “实践—学习—实践—提高”的过程,不仅可以更快、更深入地理解和掌握课程的内容,而且提高了自己的实践技能和独立解决实际问题的能力。
每一个新概念、知识点的提出都伴随着一个完整的、可实际运行的实用程序及其输入、输出。学生通过完成实际的应用程序,掌握概念和知识点。
4. 使学生从一开始就编写有用的程序,这有助于保持读者的学习兴趣及动力。书中的实例不是只有几行代码的小程序,这些实例来源于实际应用程序或其中的一部分,它们与我们的生活相关或是大家感兴趣的内容。本书包含的大量实例及其代码分析与讨论是本书的精髓。学生可先按照所描述的方法和步骤编写代码并运行自己所创建的应用程序,“探试”该应用程序并了解其工作过程。然后通过其代码分析与讨论掌握它所包含的概念、原理和方法。
5. 逐步展现主题鲜明的各章。本书将集中重要的主题并进行充分论述,而不是肤浅地罗列许多概念、术语和语法。全书的内容及体系结构使学生感到它既具有易读性又增进知识,具有很强的实用性。
6. 面向实际的技术。学习程序设计语言的目的是为了开发程序,本书不只是讲授Java的语言要素、语法,而是教会读者如何用Java开发程序,书中的每一个面向实际的应用程序实例都说明了开发过程及包含的知识点。通过学习如何开发程序来掌握语言要素和语法。在第10章,通过一个实际应用程序实例,讲授了三层架构的应用程序设计方法和开发过程。三层应用程序设计是企业应用程序常用的程序设计方法。后续的许多实例都应用了三层应用程序设计,作者通过这种方式,使学生能够熟练应用这种企业常用的程序设计方法和开发过程。
7. 面向对象的程序设计。本书自始至终贯穿面向对象编程的思想。我们的目标之一是使学生习惯于现实世界的程序设计,仅仅知道面向对象的概念是不够的,学生们必须能够运用这些知识开发现实世界的程序。教学概念的核心之一是在成为一名对象设计者之前,必须首先成为一名对象用户。换句话说,在有效的设计自己的类之前,必须首先学会使用预定义的类,我们从第一个程序开始就接触如何使用类。学习使用类库的类和编写自己的类相辅相成,互相促进,学习使用类库中的类有助于学习编写自己定义的类,学习自定义类又有助于学会使用类库中的一些类,并加深对类库中的一些类的理解。当今学生必须同时掌握基础语言、面向对象编程和类库。
任何一本真正讲授面向对象方法的教材都必须从对象出发,即所有处理过程都需要依照面向对象的术语来进行讨论。然而,这并不意味着学生看到的第一个程序就涉及多个类和方法。在掌握类和方法的编写之前,应教会学生如何使用它们。本书采用的是一个自然推进的教学方式,目的是最终能够让学生在实践中设计出面向对象的问题解决方案。
8. 循序渐进,由浅入深,综合应用。本书在设计时贯穿了一个思想:面向实际,同时使读者容易理解所包含的所有细节。因此在内容安排时,循序渐进,由浅入深,后序章节在讲授新的知识点的同时综合应用了前面所学章节的知识。这样做既温习了前面所学的知识,同时也懂得了如何综合应用前面所学的知识解决问题。书中很多实际应用程序实例,只是在讲授新知识点的同时,应用了前面所学过的知识。
9. GUI及Swing控件。带有图形用户界面的程序总能激发学生们的学习欲望,以这类程序作为讲授面向对象概念的实例会取得很不错的效果。本书中实例采用了图形用户界面来介绍事件的处理与GUI的使用等知识。通过对这些内容的不断学习,学生们将逐步掌握GUI的创建。
10. 数据库。数据库应用程序如今对所有企业来说是至关重要的,因此本书用两章的篇幅通过一个具体的实际应用程序实例讨论使用JDBC与SQL访问数据库的编程技术,并应用了三层架构的应用程序设计方法和开发过程。
针对GUI及控件概念的提出,我们采用的是一个循序渐进的过程。因此,在讨论GUI及控件之前,学生已对事件的处理与GUI的使用有了一个基本的认识。因此在学习GUI及控件一章时,引入了访问数据库的一些关键性要素。通过创建数据库应用程序来学习GUI及控件。
11. 真实的编程经验。本书汲取了很多来自实际编程中的经验,这将为培养良好的编程习惯打下一个坚实的基础。这些经验会运用到所有实例当中并在探讨中得到进一步强调,学生最终将学会如何解决并实现它们。本书还引入并吸收了许多来自软件工程方面的基础知识。
由于水平和时间的关系,书中错误在所难免,欢迎专家和读者提出宝贵意见(Email: pmshaoa163.com)。本书的源代码可在http://www.pyp.edu.cn/java站点下载。如果我们发现书中的内容和代码有不当之处,我们也会在该站点发布勘误信息。要想与本书的作者进行交流,可加入论坛http://www.pyp.edu.cn/java/form/default.aspx。
邵鹏鸣2006年5月
于广州
第1部分认识Java
第1章认识Java3
1.1第一个简单的Java应用程序3
1.2简单的Swing界面应用程序7
第2部分Java程序设计基础
第2章Java编程基础13
2.1变量与常量13
2.1.1变量的含义13
2.1.2变量声明15
2.1.3常数18
2.1.4声明常数18
2.2基本数据类型19
2.2.1整型19
2.2.2字符数据类型23
2.3浮点类型27
2.3.1浮点数据类型比较32
2.4格式化输出信息33
2.5算术运算34
2.5.1算术表达式与算术运算符34
2.5.2算术运算符优先级规则34
2.6基本数据类型的相互转换35
2.6.1隐式数值转换35
2.6.2显式转换37
2.7布尔类型38
2.8Scanner类和键盘输入39
第3章面向对象程序设计初步43
3.1类和对象43
3.2消息和方法44
3.3使用现有的类45
3.4创建自己的类50
3.5继承63
3.6接口72
3.6.1概念72
3.6.2事件处理73
第4章程序流控制77
4.1选择语句77
4.1.1if语句77
4.1.2if...else语句82
4.1.3条件运算符87
4.1.4if...else if...else语句92
4.1.5if语句的嵌套97
4.1.6switch语句101
4.1.7复合赋值运算符106
4.1.8条件逻辑运算符和逻辑运算符107
4.2循环语句107
4.2.1while语句107
4.2.2do...while语句113
4.2.3for语句114
4.2.4嵌套循环117
4.2.5增量运算符与减量运算符118
4.3跳转语句119
4.3.1break语句119
4.3.2continue语句120
4.3.3运算符的优先级121
第5章数组与方法122
5.1数组122
5.1.1数组初始化129
5.1.2变长数组的声明130
5.2多维数组133
5.2.1多维数组的声明创建134
5.2.2多维数组初始化134
5.2.3二维数组应用举例135
5.3值类型与引用类型138
5.4方法141
5.4.1传值方式142
5.4.2将值类型的变量作为参数142
5.4.3传递引用类型参数149
5.4.4可变数目的参数154
第3部分面向对象程序设计
第6章基于对象程序设计161
6.1类、对象和封装162
6.2字段163
6.2.1常数和只读字段166
6.2.2成员访问控制167
6.3set访问器和get访问器167
6.3.1set访问器167
6.3.2get访问器168
6.3.3类作用域169
6.3.4使用this关键字169
6.4构造函数172
6.4.1默认构造函数172
6.4.2默认初始化字段174
6.4.3显式初始化字段174
6.4.4构造函数声明175
6.5构造函数重载178
6.5.1使用重载构造函数178
6.5.2调用同类中的其他构造函数180
6.6静态成员与实例成员181
6.6.1静态字段和实例字段181
6.6.2静态初始化块183
6.6.3静态方法184
6.6.4静态和实例成员特征185
6.7对象参数与返回值为对象186
6.7.1以对象作为参数186
6.7.2返回值为对象188
6.8方法的重载190
6.9装箱和取消装箱192
6.9.1包装类192
6.9.2Integer类的常用方法193
6.9.3自动装箱和自动取消装箱193
第7章继承195
7.1直接基类与派生类196
7.2派生类构造函数声明199
7.3隐藏从基类继承的字段和静态方法209
7.4含直接基类构造函数的构造函数声明210
7.5重写超类方法211
7.5.1多级继承中构造函数的执行过程222
7.5.2重载和重写的比较223
7.5.3垃圾回收和finalize方法223
7.6使用ArrayList类223
7.7泛型234
7.8枚举类型235
第8章多态性239
8.1抽象方法与抽象类239
8.1.1抽象方法240
8.1.2抽象类继承246
8.2接口253
8.2.1声明和实现接口253
8.2.2接口和抽象类257
8.2.3接口与抽象类的比较267
8.2.4Java类库中的接口实现举例268
8.3内部类274
8.3.1使用内部类访问包含它的对象的私有成员变量275
8.3.2适配器277
8.3.3匿名内部类278
第9章异常处理282
9.1异常举例282
9.2异常和异常类283
9.3捕获异常285
9.4finally子句288
9.5理解异常处理288
9.5.1声明异常289
9.5.2抛出异常289
9.5.3捕获异常289
第4部分图形用户界面和数据库程序设计
第10章Swing及GUI程序设计297
10.1滚动条297
10.1.1滚动条的构造函数302
10.1.2滚动条的常用方法302
10.1.3滚动条的事件303
10.1.4用户定义的颜色303
10.2事件模型304
10.2.1Button按钮的构造函数313
10.2.2Button按钮的常用方法313
10.2.3Button按钮的常用事件313
10.3复选框和单选按钮314
10.3.1如何设置字体321
10.3.2复选框的构造函数321
10.3.3复选框的常用方法321
10.3.4复选框的常用事件322
10.3.5单选按钮的构造函数322
10.3.6单选按钮的常用方法323
10.3.7单选按钮的常用事件323
10.4Connection和Statement对象323
10.4.1Connection对象324
10.4.2Statement对象329
10.5使用ResultSet331
10.6创建三层应用程序352
10.7显示图片361
10.7.1ImageIcon365
10.7.2组件的setIcon方法366
10.8组合框控件和密码框控件366
10.8.1JComboBox的常用方法374
10.8.2组合框的事件375
10.8.3JTextField构造函数375
10.8.4JTextField的常用方法376
10.8.5JPasswordField常用方法376
10.9列表框377
10.9.1列表框的常用方法399
10.9.2DefaultListModel常用方法400
10.9.3列表框控件的常用事件401
第11章使用JDBC进行数据库编程402
11.1可滚动的ResultSet402
11.2可更新的ResultSet415
11.2.1更新ResultSet415
11.2.2插入新行和删除行420
11.3使用PreparedStatement422
11.3.1创建PreparedStatement422
11.3.2执行PreparedStatement423
11.4使用CallableStatement执行存储过程429
11.4.1IN参数430
11.4.2OUT参数431
11.5JTable和ResultSetMetaData432
11.5.1使用JTable浏览数据库数据432
11.5.2使用JTable修改数据库数据436
参考文献440