本教材编写过程中坚持够用、实用、简单、直接的教学理念, 对教学内容进行精心设计和选择, 通过120个示例程序、100个程序编写任务、50个微视频和测试、8个难度和工作量适宜的课程设计, 为学生构建全方位立体化、科学合理的Java学习路线图, 构建了微视频、编程、实验、课程设计在内的Java实训体系。
1.配有近20小时、60段微课视频,扫描书中二维码即可访问,并提供二维码页码索引。
2.精心设计150个程序实例、75道编程实践题与若干实际操作题,重点题目提供解题过程视频。所有题目提供解题源代码。
3.精心设计8个课程设计项目并提供详细解析。
4.提供SCJP(原Sun公司Java认证考试)全英文自测题,帮助读者提高英文水平。
前言 经过二十几年的发展,Java语言已经成为计算机史上影响深远的编程语言。不但如此,Java已经超出了编程语言的范畴,发展成为一个开发平台、一个产业、一种思想、一种文化。 “Java程序设计”是计算机科学与技术专业的一门专业基础必修课程。在教育部计算机基础课程教学指导委员会制定的白皮书中,“Java程序设计”课程被列为核心课程。Java软件开发方向是我国目前IT行业计算机类专业学生的重要的就业方向。
1. 高校IT人才培养的背景 (1) 经济社会的高速发展对IT产业(尤其是软件产业)提出了更高的要求,对Java软件开发人才从数量和质量方面也都提出了更高的要求。 (2) 智能手机操作系统——Android的市场占有率一路攀升。Android系统采用Java语言来开发手机应用程序,这给Java带来新的发展机遇。 (3) 教育技术的进步和移动互联网时代的到来打破了高校进行知识传播的技术壁垒,大量的资本和风险投资涌进IT培训产业。达内、东软、传智播客等实体IT培训机构,开课吧、慕课网、极客网等在线IT培养机构引入了先进的教学理念、强大的技术支持,再加上商业化运作,给高校IT人才培养带来巨大的挑战和竞争的压力。 (4) 教学理念、教学模式的发展: CDIO、MOOC、翻转课堂、混合式教学、案例式教学、目标驱动、问题导向等教学理念、教学模式迅速渗透到每一个传统课堂。传统的“单向封闭”的教学环境开始走向开放,传统的“以教师为中心”的师生关系开始变为“以学生为中心”,传统课堂中的教师从知识传授者和课堂管理者转变为学习指导者、教学资源开发者、教学帮助者和促进者,传统课堂中的学生则由“被动接受者”转变为主动研究者。 (5) 教学环境的变化: 教室、实验室硬件配置齐全,实现了高速、稳定的Internet接入; 笔记本和手机等互联网接入设备日渐普及,这些都为先进教学理念和教学模式的实施提供了硬件和软件上的准备。 (6) 教育参与者: 教师正在树立“教育就是服务”的教育观念,正在贯彻工程教育的教育理念,从注重“教师教什么”转移到“学生学到了什么”。学生作为数字原住民,对新鲜事物、新技术、新教学方式(人性化学习、泛在学习等)有着天然的渴望。 IT产业、软件技术、软件人才培养竞争、教学理念、教学模式、教学环境、教学对象等因素的发展和变化使得高校必须进行教学改革,教师必须围绕以上因素进行课程教学改革,教材建设也是势在必行。
2. Java教材存在的问题 教材作为人才培养的重要载体,是主要的教学资源之一,是教与学的重要凭借,是教学理念、教学特色、教学方法、教学内容、教学资源等的全面体现。以纸质教材为中心,构建支持学生学习全过程、线上线下相结合的全新生态系统,是国内外教材发展的*新趋势。鉴于Java技术的市场地位,Java教材从国外原版教材到翻译教材再到本土化教材,呈现出百家齐放、百家争鸣的良好局面。目前,Java教材也存在以下问题: 教学理念、教学模式不能紧跟时代潮流,教学内容的选择和呈现过于单一,对学生的学习过程支持不够,特色不够鲜明,等等。
3. 本书的内容 根据市场定位和面向受众不同,Sun公司把Java技术分成Java ME、Java SE和Java EE几个平台。显然,Java*成功的领域是Java EE。学习Java应该从Java SE入手,为后续学习打下坚实的基础,然后才能学习Java EE和Java ME。 本书主要面向Java SE,基于JDK 1.7和Eclipse IDE环境,对教学内容进行重新选择和设计,删除了使用频率少或已经淘汰的技术,如Applet等; 加入JDK 1.5、JDK 1.6、JDK 1.7等版本的语言新特性; 加强Eclipse IDE环境的使用; 加强swing GUI编程技术教学,引入了swing开发插件——WindowBuilder; 加强多线程技术教学,介绍了Concurrency开发库技术; 加强Java网络编程技术、JDBC编程技术。本书分为上篇、中篇和下篇3个部分,分别介绍如下。 (1) 上篇“Java编程基础”: 本篇通过Java发展介绍、Java开发环境的构建、Java语言基础、流程控制、数组、类和对象、包装类、Java文档注释、UML、接口、内部类、异常处理等内容使读者能够快速掌握Java语言语法、Java编程基本技巧和面向对象编程思想,为以后编程奠定坚实的基础。 (2) 中篇“Java高级编程”: 本篇首先介绍java.lang包中的常见类、java.util包中的常见类、java.text包中的常见类、集合类框架、枚举、泛型、正则表达式,然后分别介绍Java I/O技术、Java GUI编程技术、Java多线程技术、Java网络编程技术、JDBC编程技术等。通过本篇的学习,读者能够具备进行Java应用开发的技术基础。 (3) 下篇“课程设计”: 本篇采用CDIO“做中学”的教学理念,通过下达项目任务、项目设计、项目学中做、总结提高等步骤介绍了8个工作量适中、综合性强、能解决实际问题的Java课程设计。课程设计将本书的内容进一步融会贯通,使读者在解决实际问题的过程中加深对技术的理解和应用。 在教学时教师可以根据学时、教学对象、教学目的等因素对教学内容进行选择、组合和取舍。
4. 本书的特色 编者投入了大量精力,力求使本书体现以下特色。 (1) 强调“简单、直接、实用、够用”的教学理念,贯彻“以服务为宗旨,以应用为目的,以实用为主,理论够用为度”的教学原则,以培养学生应用能力为主线,通过一个知识点“知识准备、示例程序、总结提高”的步骤来讲解程序的编写、调试和运行。 (2) 案例式教学: 强调“用Java语言讲解Java语言”的教学理念,根据教学内容精选142个示例程序,强调示例程序的针对性、实用性、关联性,让学生通过阅读和调试示例程序迅速理解理论知识,并达到实践效果。本书所有示例程序均经过反复调试,确保风格统一、注解翔实、代码规范、正确高效。 (3) 编程任务: 本书在每章结束时均提供了和教学内容对应的编程实践任务,分不同的难度等级,并给出编程提示。本书共提供了100个编程实践任务。 (4) 低成本微课的录制: 编者认为动辄几个吉字节、几十个小时的教学全程录像是高成本、低效率的,而且没有必要,通过仔细阅读即可理解的内容没有必要录制成视频。但Java教学过程中的重/难点、编程实践等内容非常有必要使用Camtasia Studio软件进行屏幕录像、编辑后通过网络提供给学生。这种方法对于教师来说是低成本、低门槛、高效率的,教师简单学习后即可上手,无须求助他人。每段微视频(微课)限制在15分钟左右,集中讲解一个知识点或一个程序的编写,详细展现编程实现的思维过程。本书免费提供60段微视频(微课),总时长上千分钟,可扫描二维码观看,详细列表见前言的*后。 (5) 强调JDK文档的阅读: Java类库(又称为Java应用程序编程接口API)由编译器厂商、独立软件供应商等以Jar文件和文档的形式提供。通过API文档来了解类库中类和方法的使用是一个程序员必须掌握的技巧。 (6) 强调英文的阅读: 英文软件的汉化不尽如人意,因此读者在学习Java的过程中对英文的阅读是一个不可回避的问题,如JDK英文文档的阅读、Eclipse纯英文IDE环境、英文标识符的命名、SCJP全英文试题的阅读等(关于SCJP考试的说明请参阅附录A),本书在各章的自测题中引入了全英文的SCJP选择题,在附录中增加了在Eclipse英文版中进行Java应用开发的内容,并给出Eclipse常见提示错误的中文翻译。 (7) 基于CDIO的课程设计: 在学完Java技术之后,读者只是具备了Java编程基础,如果没有课程设计环节,知识和能力也就做不到真正的融会贯通,因此,本书以工程教育理念为指导,遵循CDIO教学模式,采用项目导向的方式,充分体现“做中学”的理念,提供了8个任务要求明确、工作量适中、综合性强的Java应用项目。 (8) 本书以“学生学习Java技术”的角度进行知识的呈现,而不像传统教材那样仅仅站在教师教学的角度,并强调支持和服务要贯穿学生的整个学习过程。同时,本书为教师实施翻转课堂教学提供了支持,为评价学生学习能力提供了数量足够的素材和题库。
5. 本书的使用 (1) 第1章的例程要求安装JDK 1.7后在DOS命令行下完成Java程序的编写、调试和运行。 (2) 从第2章开始,要求安装Eclipse或MyEclipse,构建Java软件开发环境; 要求在Eclipse/MyEclipse IDE中完成Java程序的编写、调试和运行。请读者详细阅读附录B,掌握Eclipse/MyEclipse的基本使用技巧。 (3) Java编程实训作业以Java Project的形式提交,具体要求请参考2.7节。 (4) 为减少篇幅,本书中的Java示例程序有以下特点: 省略了import语句; 省略了部分注释;
作者:张延军、王保民、何月梅、司玲玲、乔德军
目录
上篇Java编程基础
第1章走进Java世界
1.1Java语言简介
1.1.1Java发展简史
1.1.2Sun与Microsoft
1.1.3Java的影响力
1.1.4Java语言的特点
1.2Java开发环境的构建
1.2.1高级语言的运行机制
1.2.2JVM、JRE和JDK
1.2.3JDK的下载和安装
1.2.4JDK环境变量的配置
1.2.5JDK安装文件夹介绍
1.3Java程序的编辑、编译和运行
1.3.1*个Java程序(HelloWorld.java)
1.3.2显示命令行参数(CommArg.java)
1.3.3Java程序的各种形态
1.4Java IDE介绍
1.5本章小结
1.6自测题
1.7编程实训
第2章Java语言基础
2.1Java程序的构成
2.1.1标识符
2.1.2关键字和保留字
2.1.3Java注释
2.2Java数据类型、常量和变量
2.2.1Java数据类型
2.2.2常量
2.2.3变量
2.2.4基本数据类型的转换
2.2.5基本数据类型的对象包装类
2.3Java运算符、表达式、语句和程序
2.3.1运算符
2.3.2表达式
2.3.3语句和程序
2.3.4Java程序的书写风格
2.4Java流程控制语句
2.4.1顺序结构
2.4.2分支结构
2.4.3循环结构
2.4.4break和continue语句
2.5Java语言编程的基本技巧
2.5.1Java数据的输出
2.5.2Java数据的输入
2.5.3用JOptionPane类实现各种对话框
2.5.4Java程序运行时间的计算
2.6Java数组
2.6.1一维数组
2.6.2二维数组
2.6.3数组工具类(Arrays)
2.7Java编程作业的提交要求
2.8本章小结
2.9自测题
2.10编程实训
第3章面向对象编程基础
3.1面向对象技术简介
3.1.1面向过程和面向对象
3.1.2面向对象的特征
3.2类
3.2.1类的定义
3.2.2成员变量
3.2.3局部变量
3.2.4成员方法的定义
3.2.5成员方法的调用
3.2.6成员方法的递归调用
3.3对象的实例化与清除
3.3.1构造方法的定义
3.3.2构造方法的调用——实例化对象
3.3.3垃圾回收机制
3.3.4Java程序的优化
3.4引入类和定义包
3.4.1包概念的提出
3.4.2JDK API常见包介绍
3.4.3package和import语句
3.5Java文档注释
3.5.1常用的Javadoc标记
3.5.2利用javadoc.exe生成API文档的方法
3.5.3在Eclipse中生成API文档的方法
3.6UML
3.6.1UML简介
3.6.2UML 建模工具
3.6.3在MyEclipse下进行UML建模
3.7俄罗斯方块程序的阅读(Tetris.java)
3.8本章小结
3.9自测题
第3章 面向对象编程基础
在本章我们将一起学习以下内容: 面向对象技术简介。 类的定义、变量和方法的定义。 对象的实例化与清除。 引入类和定义包。 Java文档注释。 用UML绘制类图。 相对于硬件技术发展的日新月异,软件技术的发展相当迟缓。软件技术面临着非常多的挑战,在要求软件功能更加新颖、更加强大的同时,人们又要求软件开发人员可以快速、高效地构建质量优、重用性高、维护性强的软件系统。 软件开发从汇编语言、过程式语言、面向对象、面向组件发展到面向服务,每一步都体现了不断抽象、更加贴近业务实际的发展趋势。 软件开发人员发现采用模块化、面向对象的设计和实现方法可以显著提高软件开发的工作效率,而且面向对象程序更易于理解、重用性高,便于纠错和修正。
3.1面向对象技术简介
3.1.1面向过程和面向对象 目前软件开发领域主要有结构化开发方法和面向对象开发方法两种。 结构化开发方法(又称为面向过程)的程序设计简单,可读性强,易于阅读和理解,便于维护,是面向对象程序设计的基础。面向过程把问题求解过程(即算法)放在*位,主张按功能把软件系统逐步细分,遵循“自顶向下,逐步求精”的思想。面向过程提供顺序、分支和循环3种逻辑结构,每种逻辑结构要求单入口和单出口。 面向对象开发方法是一种以事物为中心的编程思想,用一种更符合人们认识客观世界的思维方式进行程序设计。它克服了面向过程的缺点,达到了软件工程的3个主要目标,即重用性、灵活性和扩展性。 面向对象的软件开发方法的生命周期主要包含了以下阶段。
(1) 面向对象的分析OOA(ObjectOriented Analysis): 对用户需求进行分析,确定系统的范围和功能,明确要做什么。
(2) 面向对象的设计OOD(ObjectOriented Design): 对OOA分析的结果做进一步的规范化整理,以便能够被OOP直接接受。目前业界统一采用UML来描述和记录OOA与OOD的结果。
(3) 面向对象的程序设计OOP(ObjectOriented Program): 在面向对象程序设计方法中,程序被看作是相互协作的对象的集合。每个对象都是某个类的实例。所有类构成一个通过继承关系联系的树形层次结构。因此,面向对象程序设计的基本构成是类和对象。类是一组相似对象的描述,描述了该类对象所具有的共同特征。对象封装了描述其状态的数据(属性)以及可以对这些数据进行的操作(方法),对象之间通过发送消息相互协作。 面向对象的主要概念包括类和对象、接口、包、属性、方法(一般方法、构造方法、抽象方法)、修饰符、引用类型的转换(上溯/下溯造型)等。
3.1.2面向对象的特征 面向对象具有四大特征,即抽象、封装、继承和多态。
1. 抽象 抽象其实也是所有计算机语言的特征,指从众多的事物中舍弃个别的、非本质的部分,提炼出计算机系统所关注的、共同的、本质的部分(属性和功能)的过程。抽象包括过程抽象和数据抽象。 过程抽象将整个系统的功能划分为若干部分,强调功能完成的过程和步骤,而隐藏其具体的实现。 数据抽象是将系统中需要处理的数据和这些数据上的操作结合在一起,抽象成不同的抽象数据类型(ADT)。
2.封装 封装(Encapsulation)指属性和方法的定义都封装在类定义中,然后通过对其可见性来控制外部对类成员的可访问性。 (1) 类(对象)的属性和方法是不可分割的整体,反映了客观事物的静态特征和动态行为相统一的客观规律,使计算机软件对客观事物的描述更接近人类表述。过去的面向过程的编程语言将功能和数据分离,使软件对客观事物的描述存在偏差,很难自然地用语言表达客观事物的对应关系。在Java中,类封装了属性、方法、构造方法、语句块、内部类等成员,如图31所示。 用UML标准符号绘制Car类图如图32所示。 图31类封装示意图 图32UML类图 UML类图可以转换为Java语言: 01class Car{ 02private int color_number; 03private int door_number; 04private int speed; 05public void brake(){…} 06public void speedUp(){…} 07public void slowDown(){…} 08} (2) 封装还涉及类或对象内部细节的隐蔽性。类设计者可以通过使用访问权限控制修饰符private、protected、public 3个关键字、4个访问控制级别来细粒度地控制外部是否可以访问类或对象的成员。一般将属性设置为private,然后提供Getter和Setter方法存取数据的统一接口。访问其他类对象成员的示意图如图33所示。 图33访问其他类对象成员的示意图 【示例程序31】自定义日期类(MyDate.java) 功能描述: MyDate日期类型有年、月、日3个私有属性; 提供了无参构造方法,包含全部属性的构造方法; 在自动生成私有属性的Getter和Setter方法的代码的基础上进行了定制。
01public class MyDate { 02private int year; 03private int month; 04private int day; 05public MyDate() { 06super(); 07} 08public MyDate(int year, int month, int day) { 09super(); 10setYear(year); 11setMonth(month); 12setDay(day); 13} 14public int getYear() { 15return year; 16} 17public void setYear(int year) { 18if(year>1&&year<9999){ 19this.year = year; 20} 21} 22public int getMonth() { 23return month; 24} 25public void setMonth(int month) { 26if(month>=1&&month<=12){ 27this.month = month; 28} 29} 30public int getDay() { 31return day; 32} 33public void setDay(int day) { 34if(day>=1&&day<=31){ 35this.day = day; 36} 37} 38}