本书用面向对象的思想介绍了如何运用Java语言基础进行Java程序的设计。全书共分9章, 包括Java入门、Java语言基本语法、Java面向对象编程、异常处理、Java Applet程序、图形化用户界面编程、线程机制、输入输出流和Java数据库技术。其中前两章使用记事本编辑Java程序和在DOS界面下使用命令行进行编辑和运行程序, 这样有利于初学者熟悉和掌握Java的基本语法和程序格式; 后面的章节使用Eclipse作为Java程序开发环境, 围绕“学生信息管理系统”项目的分析和开发过程逐渐展开。本书注重培养读者使用面向对象的思维方法分析问题与解决问题的能力, 注重使用Eclipse提高学习知识与开发程序的效率。全书内容循序渐进, 结构合理, 每节案例都具有代表性, 每章最后的综合案例是对本章知识的梳理和总结, 充分运用“项目驱动式”进行知识讲解。
1.一线教师倾力加盟
2.案例采用进阶设计。每个案例约分成3~8阶段分解和设计,一部分案例采用逐步完善并进一步优化方法,最终形成一个完整的程序;另一部分案例采用划分为多个类并逐个类分析和讲解的方法。
3.针对性强。案例的选题贴近学生平时的兴趣点,注重提升学生的“创新和创业”能力的培养。
4.教辅材料齐全。本教材有配套的教案、课件和案例等。
前言
伴随我国经济结构的调整,科技兴国战略的进一步实施,科学、工业、国防和教育行业需要大批高素质的计算机专门人才。
我国高等教育事业取得了举世瞩目的成就,但也面临不少深层次的矛盾和困难,主要体现在:高等教育规模居世界之首,但“大而不强”的问题比较突出;以质量求生存、求发展的意识有所强化,但对提高质量投入的资源与精力依旧不足、教学的中心地位仍欠重视;教育体制机制改革虽在持续推进,但仍不能适应经济发展新常态、释放创新活力的需求;教育国际化水平不断提高,但我国高等教育的国际话语权和竞争力依旧不强。
随着我国高等教育水平不断提高,与发达国家高等教育的差距日益缩小,由此,自身创新的任务愈发凸显和繁重。以新发展理念引领高等教育新发展、以创新的思维发展教育事业,着力深化教育理念、培养模式、教学内容方法手段的改革,着力培养具有社会责任感、创新精神和实践能力的人才。作为一名普通的高校教师,除了提升自身能力和素质,就是对教材的更新和创新,因为要培养一流的计算机人才必须要有一流的名师指导和精品的教材辅助。
本书既注重基础知识的讲解,同时更注重知识灵活运用和创新思维的培养。本书的特色有以下4点。
1.一线教师倾力加盟
一线教师倾力加盟参与编写教程内容和教学案例的设计;所有案例都通过上机调试,能够正确运行;依托案例来讲解和分析Java语言的基础知识,注重工程技术能力的培养。
2.案例采用进阶设计
每个案例分成3~8阶段来分解和设计,一部分案例采用逐步完善并进一步优化方法,最终形成一个完整的程序;另一部分案例采用划分为多个类并逐个类分析和讲解的方法。总之,从简到繁、从易到难,使学生在学习编程的过程有缓冲的空间,不会感到太大的压力。
3.针对性强
案例的选题贴近学生平时的兴趣点,注重提升学生的“创新和创业”能力的培养。4.教辅材料齐全
本书有配套的教案、课件和案例等。
参加本书编写工作的有:第一主编辽宁科技学院讲师胡楠(编写第3章、第5~9章),第二主编辽宁科技学院讲师马志财(编写第1章、第2章和第4章)。全书由主编胡楠统稿,后又根据出版社的意见进行了必要的修改和定稿。
限于编者的水平,书中难免出现疏漏之处,恳请广大师生和读者提出宝贵意见和建议,以便再版修订时改正。
编者2017年2月
第1章Java入门1
1.1Java语言概述1
1.1.1Java语言发展史1
1.1.2Java的特点2
1.1.3Java平台体系结构2
1.2Java运行环境及配置4
1.2.1JDK安装包的下载和安装4
1.2.2Java环境配置7
1.2.3Eclipse的安装和基本使用8
1.3Java例子程序12
1.3.1Java程序开发步骤12
1.3.2Java Applet(小程序)开发步骤14
课后上机训练题目15
第2章Java语言基本语法16
2.1Java程序结构16
2.1.1源代码文件框架16
2.1.2注释符16
2.1.3标识符、关键字和转义符17
2.2数据类型、变量和常量20
2.2.1数据类型20
2.2.2变量与常量21
2.3运算符和表达式23
2.3.1算术运算符23
2.3.2关系运算符24
2.3.3逻辑运算符25
2.3.4位运算符26
2.3.5赋值运算符27
2.3.6其他运算符及其表达式282.3.7运算符的优先级30
2.3.8表达式30
2.4Java流程控制32
2.4.1分支语句32
2.4.2for循环语句40
2.4.3while循环结构44
2.4.4dowhile循环结构46
2.4.5break语句和continue语句48
2.4.6流程控制综合案例——制作日历50
2.5数组的使用56
2.5.1数组的声明56
2.5.2数组的创建57
2.5.3数组综合案例——学生成绩管理系统61
课后上机训练题目67
第3章Java面向对象编程68
3.1类68
3.1.1类的定义和声明68
3.1.2类的成员变量69
3.1.3类的成员方法70
3.1.4方法重载73
3.1.5构造方法74
3.2对象76
3.2.1使用new实例化对象77
3.2.2对象的使用77
3.2.3方法的参数传值78
3.2.4对象的销毁82
3.3类的封装83
3.3.1包机制83
3.3.2访问权限86
3.3.3读写访问器88
3.3.4静态成员的访问方法90
3.4继承92
3.4.1父类和子类92
3.4.2super和this关键字95
3.4.3最终类和抽象类98
3.5接口100
3.5.1接口的声明与实现100
3.5.2常用的系统接口104
3.6多态105
3.6.1多态的实现条件105
3.6.2静态多态与动态多态105
3.6.3静态绑定与动态绑定105
3.7内部类107
3.7.1内部类的声明和使用107
3.7.2内部类的类型107
3.8常用类112
3.8.1java.lang包中的基础类112
3.8.2java.util包中的集合类116
3.9面向对象编程案例——学生成绩管理系统119
课后上机训练题目126
第4章异常处理127
4.1异常的概述127
4.2异常类——Throwable128
4.2.1Exception类及其子类128
4.2.2Error类及其子类129
4.3Java异常处理机制130
4.3.1捕捉异常130
4.3.2抛出异常132
4.3.3异常处理举例132
4.4用户自定义的异常类135
课后上机训练题目136
第5章Java Applet程序137
5.1Applet的运行原理137
5.1.1Applet概述137
5.1.2Applet类的层次138
5.1.3Applet的生命周期138
5.1.4Applet图形的显示和刷新139
5.1.5Applet的创建和执行140
5.2HTML中的Applet标记和属性142
5.3Java Applet程序案例——简单图形展示143
课后上机训练题目145
第6章图形化用户界面编程146
6.1AWT和Swing146
6.1.1AWT 概述147
6.1.2Swing概述147
6.1.3AWT与Swing的关系148
6.1.4Swing组件149
6.2Swing的容器组件151
6.2.1Swing顶层容器151
6.2.2Swing普通容器158
6.3Swing常用组件163
6.3.1标签(JLabel)163
6.3.2文本框(JTextField)与密码框(JPasswordField)163
6.3.3文本域(JTextArea)164
6.3.4按钮(JBotton)165
6.3.5单选按钮(JRadioButton)167
6.3.6复选框(JCheckBox)169
6.3.7选择框(JComboBox)170
6.3.8列表框(JList)170
6.4Swing高级组件172
6.4.1表格(JTable)172
6.4.2树(JTree)175
6.4.3菜单(JMenuBar)178
6.4.4进度条(JProgressBar)182
6.5布局管理器183
6.5.1BorderLayout布局管理器183
6.5.2FlowLayout布局管理器183
6.5.3GridLayout布局管理器184
6.5.4GridBagLayout布局管理器184
6.5.5CardLayout布局管理器185
6.6事件处理188
6.6.1事件类和事件监听器188
6.6.2事件处理机制190
6.6.3焦点事件192
6.6.4选项事件193
6.6.5键盘事件196
6.6.6鼠标事件197
6.6.7窗口事件200
6.7图形用户接口案例——计算器202
课后上机训练题目207
第7章线程机制208
7.1线程简介208
7.1.1线程的概念208
7.1.2Runnable接口和Thread类209
7.2线程的实现210
7.2.1继承Thread类创建线程210
7.2.2实现Runnable接口创建线程211
7.3线程的状态与调度212
7.3.1线程的生命周期212
7.3.2线程的优先级和调度策略213
7.4线程状态的切换214
7.4.1线程的启动和终止214
7.4.2线程的就绪和阻塞216
7.5线程的同步217
7.5.1资源冲突217
7.5.2同步和锁 219
课后上机训练题目222
第8章输入输出流223
8.1输入输出流概述223
8.1.1数据流基本概念223
8.1.2数据流类介绍224
8.2字节流227
8.2.1InputStream和OutputStream227
8.2.2FileInputStream和FileOutputStream228
8.2.3ByteArrayInputStream和ByteArrayOutputStream 231
8.2.4BufferedInputStream和BufferedOutputStream233
8.2.5SequenceInputStream236
8.2.6System.in和System.out238
8.3字符输入和输出239
8.3.1Reader和Writer239
8.3.2InputStreamReader和OutputStreamReader240
8.3.3FileReader和FileWriter242
8.3.4BufferedReader和BufferedWriter242
8.3.5StringReader和StringWriter243
8.4文件246
8.4.1File类246
8.4.2RandomAccessFile类249
8.5Java对象串行化252
8.5.1串行化的概念252
8.5.2串行化的方法253
课后上机训练题目255
第9章Java数据库技术256
9.1数据库简介256
9.1.1关系数据库概述256
9.1.2MySQL数据库简介258
9.1.3MySQL Workbench简介262
9.2JDBC数据库编程263
9.2.1JDBC技术介绍264
9.2.2使用JDBC访问数据库264
9.2.3JDBC高级特性276
9.3数据库编程案例——学生管理系统291
课后上机训练题目301
参考文献302
第1章Java入门任务目标
(1)了解Java语言的发展史。
(2)掌握JDK的安装、环境变量的设置及常用命令的使用;掌握Java集成开发环境Eclipse的使用。
(3)掌握JavaApplication与JavaApplet程序结构、编译、运行的过程。
1.1Java语言概述
Java语言是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java技术具有卓越的通用性、高效性、平台移植性和安全性。
1.1.1Java语言发展史
1991年,美国Sun公司的某个研究小组为了能够在消费类电子产品上开发应用程序,积极寻找合适的编程语言。消费电子产品种类繁多,包括电冰箱、电视机顶盒、微波炉等,即使是同一类消费电子产品所采用的处理芯片和操作系统也不相同,也存在着跨平台的问题。研究小组考虑是否可以采用当时最流行的C++语言来编写消费电子产品的应用程序,但是研究表明,对于消费电子产品而言C++语言过于复杂和庞大,安全性也并不令人满意。于是,BillJoy领导的研究小组就着手设计和开发出一种语言,称之为Oak语言(橡树语言)。该语言简化了C++语言,保留了C++语言的大部分语法规则,去掉了头文件、预处理、指针、运算符重载、多继承等功能。
但是Oak语言在商业上并未获得成功。时至1995年,互联网在世界上蓬勃发展,Sun公司发现Oak语言所具有的跨平台、面向对象、安全性高等特点非常符合互联网的需要,于是改进了该语言的设计,并把Oak更名为Java后,Sun公司于1995年5月23日正式对外发布。Java是印度尼西亚一个以盛产咖啡而闻名的小岛,而程序员们往往喜欢喝咖啡,因此起名为Java语言。看来,目前Java这杯咖啡已经飘香在世界各地。1.1.2Java的特点
Java语言是一种适用于网络编程的语言,它的基本结构与C++极为相似,但却简单得多。它集成了其他一些语言的特点和优势,又避开了它们的不足之处。它的主要特点如下。
1.简单性
Java与C++相比,不再支持运算符重载、多重继承等易混淆和较少使用的特性,而增加了内存空间自动垃圾收集的功能,复杂特性的省略和实用功能的增加使得开发变得简单而可靠。另外,Java的系统非常小,Java应用软件能在相当小的系统之上独立工作。
2.平台独立性
这是Java最吸引人的地方。由于它采用先编译成中间码(字节码),然后装载与校验,再解释成不同的机器码来执行,即“Java虚拟机”的思想,“屏蔽”了具体的“平台环境”特性要求,使得只要能支持Java虚拟机,就可运行各种Java程序。
3.面向对象的技术
面向对象的技术是近年来软件开发中用得最为普遍的程序设计方法,具有继承性、封装性、多态性等众多特点,Java在保留这些优点的基础上,又具有动态联编的特性,更能发挥出面向对象的优势。
4.多线程
多线程机制使应用程序能并行执行,Java有一套成熟的同步原语,保证了对共享数据的正确操作。通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为,而不需要采用全局的事件循环机制,这样就很容易实现网络上实时的交互行为。
5.动态性
Java的设计使它适合于一个不断发展的环境,在类库中可以自由地加入新的方法和实例变量而不会影响用户程序的执行,并且Java通过接口来支持多重继承,使之比严格的类继承具有更灵活的方式和扩展性。
6.安全性
Java有建立在公共密钥技术基础上的确认技术,指示器语义的改变将使应用程序不能再去访问以前的数据结构或是私有数据,大多数病毒也就无法破坏数据。因而,用Java可以构造出无病毒、安全的系统。
1.1.3Java平台体系结构
完整的Java体系结构实际上包含4个组件,即Java编程语言、Javaclass文件、Java虚拟机(JVM)、JavaAPI(应用程序接口)。当编写并运行一个Java程序时,首先用Java编程语言编写代码,然后将代码编译为Javaclass文件,最后在JVM中执行类文件。JVM与JavaAPI共同构成了Java平台,也称为JRE(JavaRuntimeEnvironment,Java运行环境),该平台可以建立在任意操作系统上。图11是Java不同功能模块之间的相互关系,以及它们与应用程序、操作系统之间的关系。
图11Java平台体系结构
1.Java虚拟机
Java虚拟机(JavaVirtualMachine,JVM)是运行所有Java程序的抽象计算机,是Java语言的运行环境。JVM可以看作在一台真正的机器上用软件方式实现的一台假想机。实际上,JVM是一套支持Java语言运行的软件系统,拥有自己完善的硬体架构,由5个部分组成,即指令集、寄存器集、类文件结构栈、垃圾收集器(GarbageCollector)、方法区域,提供了跨平台能力的基础框架,如图12所示。这5部分是JVM的逻辑成分,不依赖任何实现技术或组织方式,但它们的功能必须在真实机器上以某种方式实现。
图12JVM结构
JVM的解释器在得到字节码(.class文件)后,对其进行转换,就可以在多种平台上不加修改地运行。JVM的跨平台特点源于Java源程序(.java文件)被编译后,形成的字节码文件可以运行在任何含有JVM的平台上,无论是Windows、UNIX、Linux还是MacOS,即JVM屏蔽了与具体操作系统平台相关的信息。
JVM既可以使用软件方式实现,也可以使用硬件方式实现。
2.JavaAPI应用程序
JavaAPI是运行库的集合,它为程序员提供了一套访问主机系统资源的标准方法,JavaAPI通过支持平台无关性和安全性,使得Java适应于网络应用。
运行Java程序时,JVM装载程序的class文件所使用的JavaAPIclass文件。所有被装载的class文件(包括从应用程序中和从JavaAPI中提取的)和所有已经装载的动态库(包含本地方法)共同组成了在JVM上运行的整个程序。在一个平台能够支持Java程序以前,必须在这个特定平台上明确地实现API的功能。为访问主机上的本地资源,JavaAPI调用了本地方法。由于JavaAPIclass文件调用了本地方法,Java程序就不需要再调用它们了。通过这种方法,JavaAPIclass文件为底层主机提供了具有平台无关性、标准接口的Java程序。对Java程序而言,无论平台内部如何,JavaAPI都会有同样的表现和可以预测的行为。正是由于在每个特定的主机平台上明确地实现了JVM和JavaAPI,因此,Java程序自身就能够成为具有平台无关性的程序。
1.2Java运行环境及配置
JRE就是一个为了让Java程序在计算机上运行而搭建的一个环境。
1.2.1JDK安装包的下载和安装
Java开发工具包(JavaDevelopmentKit,JDK)是Sun公司推出的一种Java软件开发工具包(SoftwareDevelopmentKit,SDK),JDK是开发Java程序的一个平台。JDK一般有以下3种版本。
(1)SE(J2SE)(StandardEdition,标准版)是通常采用的一个版本。
(2)EE(J2EE)(EnterpireEdition,企业版),使用这种JDK开发J2EE应用程序。
(3)ME(J2ME)(MicroEdition)主要用于移动设备、嵌入式设备上的Java应用程序。
JDK内容丰富且功能强大,它是整个Java的核心,包括Java运行环境、Java工具和Java基础的类库,但是没有提供程序的编辑环境和集成化开发环境(IntegratedDevelopmentEnvironment,IDE)。通常情况下,Java源程序可以使用记事本等编辑工具来编辑。后来陆续出现并得到应用的IDE平台,如JBuilder、MyEclipse和Eclipse等,它们都建立在JDK运行环境之上,本教材采用Eclipse平台。
1.JDK安装包的下载
Sun公司的官方网址为http://www.sun.com,它提供了诸多版本的JDK供用户下载,首先选中AcceptLicenseAgreement单选按钮,然后根据计算机的操作系统选择正确的版本下载,如图13所示。下面以为jdk8u71windowsi586.exe的文件安装为例,介绍JDK的安装方法。
图13选择下载JDK的版本
2.JDK的安装
(1)双击该文件,弹出图14所示的安装向导界面,单击“下一步”按钮。
图14JDK安装程序界面
(2)进入JDK定制安装界面,如图15所示。单击“更改”按钮,将目标文件夹的位置由默认值C:\\ProgramFiles\\Java\\jdk1.8.0_71\\更改为D:\\java\\jdk\\,这样简短且不易出错,然后单击“下一步”按钮,直到出现图16所示的界面时标志着JDK安装成功。
图15JDK定制安装界面
图16JDK安装成功界面
3.安装JDK的目录信息
在D:\\java\\jdk目录下会有bin、db、include、jre、lib等子目录和部分文件,以下是部分子目录的简要介绍。
(1)bin子目录:工具和程序,可帮助开发、执行、调试、保存Java程序。
(2)include子目录:包含C头文件,支持使用Java本机界面、JVMTM工具界面以及Java2平台的其他功能进行本机代码编程的头文件。
(3)jre子目录:与JavaSE运行时环境相关,包含Java虚拟机、类库及其他文件,可支持执行以Java语言编写的程序。
(4)lib子目录:包含附加库,是开发工具需要的附加类库和支持文件。
4.JDK常用开发工具
bin子目录中的常用Java开发工具主要有以下几种。
(1)javac:Java语言的编译器,用于将Java源程序转换为字节码。
(2)java:Java解释器,执行已经转换成字节码的Java程序。
(3)appletviewer:Java小程序Applet浏览器,用于运行JavaApplet。
(4)javap:反编译工具,将类文件还原回方法和变量。
(5)javadoc:文档生成器,根据Java源代码及其说明语句生成HTML文件。
1.2.2Java环境配置
JDK安装成功后要设置环境变量,以便正常使用所安装的开发工具包。Windows7系统下待配置JDK环境变量分别是Path、ClassPath和HOME_PATH,环境变量设置步骤如下。
(1)在Windows7系统桌面上,右击“计算机”图标,在弹出的快捷菜单中选择“属性”命令,在弹出的“系统”对话框中,单击“高级系统设置”选项,在弹出的“系统属性”对话框中,单击“环境变量”按钮,如图17所示,然后进入“环境变量”对话框,如图18所示。
图17“系统属性”对话框
图18“环境变量”对话框
(2)设置Path变量。该变量的主要作用是指定Java开发包中的编译器、解释器等工具所在的目录。如图18所示的“环境变量”对话框的“系统变量”列表框中找到Path变量(如果没有Path变量,则新建一个名为Path的系统变量)后单击“编辑”按钮,在弹出的“编辑系统变量”对话框中设置变量的值:现有变量的值保持不变,在尾部追加“;D:\\Java\\jdk\\bin”。注意分号“;”不能少,它是两个路径之间的分隔符,如图19所示。单击“确定”按钮,Path变量的设置成功。
(3)设置ClassPath变量。该变量的作用是指定类搜索路径,JVM就是通过ClassPath来寻找类的。需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到ClassPath中。单击图18中“系统变量”列表框下面的“新建”按钮,在弹出的“新建系统变量”对话框中,输入变量名ClassPath,变量值为“.;D:\\Java\\jdk\\bin”,其中圆点“.”表示当前目录,写在最前面,作为系统查找类的首个路径。最后单击“确定”按钮,两个系统变量设置成功,如图110所示。
图19设置Path环境变量对话框
图110设置ClassPath环境变量对话框
(4)执行“开始”→“运行”菜单命令,输入cmd,输入命令javac,出现图111所示的窗口,说明环境变量配置成功。
图111在cmd窗口中输入javac命令的显示内容
1.2.3Eclipse的安装和基本使用
Eclipse是一个开放源代码的、基于Java的可扩展集成开发平台。它只是一个框架和一组服务,用于通过插件组件构建开发环境。Eclipse附带了一个标准的插件集,包括Java开发工具JDK。Eclipse功能完整,它由IBM公司于2001年推出。用户可以直接到官方网站http://www.eclipse.org/downloads/根据自己计算机的操作系统选择正确的Eclipse软件包版本下载。在Windows系统上要进行Java程序开发,除了需要Eclipse软件包外,还需要在计算机上安装和配置JDK。
1.Eclipse安装
使用Eclipse不需要运行安装程序,不需要向Windows的注册表写信息,只要将Eclipse压缩包解压后放到本地文件夹中即可使用。
(1)将下载的压缩包解压到本地。选定某个版本的压缩包(如eclipsejeemars1win32.zip),将其解压到本地的目录下(D:\\eclipse),然后双击此目录中的eclipse.exe文件即可启动Eclipse。打开Eclipse的界面,如图112所示。
图112启动Eclipse的界面
(2)在WorkspaceLauncher对话框中,选择或新建一个目录用于保存创建的项目,如图113所示。
图113在WorkspaceLauncher对话框中指定项目保存的目录
(3)在WorkspaceLauncher对话框中设置完毕后,单击OK按钮,进入Eclipse工作界面,如图114所示。
图114Eclipse工作界面
2.Eclipse的使用
(1)新建Java项目。在Eclipse主界面菜单栏中依次执行File→New→JavaProject命令,进入NewJavaProject对话框,输入项目名称Project_1,如图115所示,单击Finish按钮。
图115在Eclipse环境中新建Java项目
(2)新建Java类。在Eclipse主界面菜单栏中依次执行File→New→Class命令,进入NewJavaClass对话框,先设置包名为mypackage,然后设置其名称为Class_1,最后选