《面向对象程序设计(Java)》 实验指导书
成都信息工程大学软件工程学院
2019年8月
文章目录
前 言
一、 课程目标
课程目标1:能够基于Java语言的特点、Java程序的开发过程、处理流程、Java程序运行环境、开发工具等知识,根据需求制定基于Java技术的应用系统解决方案。
课程目标2:能够基于Java语言基础和面向对象程序设计的思想,使用Java语言创建与使用Java类与对象,能够创建和引入包。能够使用Java语言定义父类、子类;能够定义和使用抽象类与接口。
课程目标3:能够基于Java异常机制、Java集合框架、Java I/O编程、Java多线程编程和网络编程等知识,在Java程序中捕捉和处理异常,能够使用Java集合类编写程序解决问题,能够使用Java编程实现文件操作,能够创建和使用多线程,能够使用Java编写基于TCP和UDP的网络通讯程序。
课程目标4:能在程序设计开发过程中,针对用户交互或开发技术、系统功能等方面进行创新或扩展。
课程目标5:能选择合适的Java开发工具进行任务或功能的实现。
二、 实验目的
本实验指导书是针对软件工程本科专业中《面向对象程序设计(Java)》课程的上机应用及编程训练而编写的。上机实验的目的是使学生通过上机操作掌握本课程所讲述的程序设计思想,并能独立编写Java应用程序,独立完成一个综合各知识点的小型项目,规范编码,加强编码训练,提高学生的实际编程能力。
三、 实验基本内容
本实验指导书中设计了9个基本实验。在做实验之前要求学生要掌握相关的知识,先模拟课堂练习,再根据本实验指导书进行实验,然后可进行其他相关内容的编程练习。
本指导书中的9个实验如下:
1 | Java程序的编写、编译与运行 | 掌握编写、编译、运行简单的Java Application的方法步骤,初步了解Java程序的特点和基本结构。 |
---|---|---|
2 | Java程序设计基础 | 掌握 Java 基本数据类型、运算符与表达式;理解 Java 程序语法结构,掌握顺序结构、选择结构和循环结构语法的程序设计方法;理解并掌握数组和字符串的使用。 |
3 | Java的面向对象特性(1) 了解类的封装方法, | 掌握如何创建类和对象,了解成员变量和成员方法的特性,掌握 OOP 方式进行程序设计的方法 。 |
4 | Java的面向对象特性(2) | 掌握Java的继承与多态;掌握抽象类与接口;掌握Object类的equals方法和toString方法的使用。能编写体现类的继承性(成员变量、成员方法、成员变量隐藏)、类的多态性(成员方法重载、构造方法重载)的程序。 |
5 | 异常处理 | 掌握异常处理的基本概念,学会使用try…catch块捕获常见的运行期异常;学会用throws从函数中抛出异常。 |
6 | 集合练习 理解泛型类、泛型方法的创建和使用;了解Set接口、List接口、Map接口及其主要实现类; | 掌握ArrayList、 HashMap的使用。 |
7 | 文件操作练习 掌握Java输入输出的结构; | 掌握Java流的概念和利用流进行文件操作的方法。 |
8 | 多线程应用练习 练习创建线程, | 掌握Java多线程的实现 |
9 | Java网络编程 | 分别基于Socket模型和多线程模型,建立客户端和服务器的通信演示,实现客户端和服务器端的双向读写操作 |
四、 环境准备
- Windows操作系统下进行
- 下载并安装jdk1.7(或更高版本)
- 安装Eclipse(Myeclipse)或者JetBrains IntelliJ IDEA,并在编程环境中对Jdk进行配置
五、 实验任务及时间安排
《面向对象程序设计(Java)》是一门实践性很强的课程,除了课堂例子程序要求下课演练,以及认真完成课内安排的实验外,同学们还应该运用相关知识进行课外编程练习。《面向对象程序设计(Java)》配套上机时间为24学时,实验1、2、3、5、7、8建议可以用2学时,实验4、6、9所需实验时间教多,建议4学时作为课内答疑和实验成果检查时间,学生在课后完成该实验的具体编程工作。
六、 实验评分(互评)标准
课程目标 | 考核环节 | 评价标准 | |||
---|---|---|---|---|---|
优 (90-100) | 良 (75-89) | 中 (60-74) | 不及格 (0-59) | ||
课程目标1 | 实验1-9课程实验报告 | 代码清晰。总结部分,功能及运用的知识点说明完备、准确;测试内容全面、测试的输入设计合理;问题描述准确,解决方法具体。 | 代码清晰。总结部分,功能及知识点说明完备;测试内容全面;问题描述准确,解决方法可行。 | 总结部分,功能及知识点说明基本完备;测试内容不全面;有问题描述及解决方法。 | 代码不够清晰。总结部分,功能及知识点说明不完备;无测试输入;无问题描述及解决方法。 |
课程目标2 | 实验2-4课程实验代码 | 全部代码排版、注释、标示符命名规范;处理步骤完整、逻辑正确、流程清晰;数据完整。 | 大部分代码排版、注释、标示符命名规范;处理步骤完整、逻辑正确;数据完整。 | 大部分代码排版、注释、标示符命名规范;处理逻辑正确。 | 大部分代码排版、注释、标示符命名不规范;处理逻辑不正确。 |
~ | 实验2-4课程实验报告 | 代码清晰。总结部分,功能及运用的知识点说明完备、准确;测试内容全面、测试的输入设计合理;问题描述准确,解决方法具体。 | 代码清晰。总结部分,功能及知识点说明完备;测试内容全面;问题描述准确,解决方法可行。 | 总结部分,功能及知识点说明基本完备;测试内容不全面;有问题描述及解决方法。 | 总结部分,功能及知识点说明不完备;无测试输入;无问题描述及解决方法。 |
课程目标3 | 实验5-9课程实验代码 | 全部代码排版、注释、标示符命名规范;处理步骤完整、逻辑正确、流程清晰;数据完整。 | 大部分代码排版、注释、标示符命名规范;处理步骤完整、逻辑正确;数据完整。 | 大部分代码排版、注释、标示符命名规范;处理逻辑正确。 | 大部分代码排版、注释、标示符命名不规范;处理逻辑不正确。 |
~ | 实验5-9课程实验报告 | 代码清晰。总结部分,功能及运用的知识点说明完备、准确;测试内容全面、测试的输入设计合理;问题描述准确,解决方法具体。 | 代码清晰。总结部分,功能及知识点说明完备;测试内容全面;问题描述准确,解决方法可行。 | 总结部分,功能及知识点说明基本完备;测试内容不全面;有问题描述及解决方法。 | 总结部分,功能及知识点说明不完备;无测试输入;无问题描述及解决方法。 |
课程目标4 | 实验2-9课程实验报告 | 有较友好的交互界面;应用2项新技术。 | 有较友好的交互界面;应用1项新技术。 | 有较友好的交互界面。 | 无用户界面或交互界面不方便使用(不友好的界面)。 |
课程目标5 | 实验1-9课程实验报告 | 程序运行流程描述全面、正确;开发运行环境、k开发工具、文档工具、绘图工具选择分析合理。文档撰写规范。 | 程序运行流程描述全面、正确。文档撰写规范、文字无错漏。 | 程序运行流程描述全面、正确。文档撰写基本规范。 | 程序运行流程不合理;开发运行环境选择分析不合理。文档撰写不规范,文字错漏太多。 |
实验1:Java程序的编写、编译与运行
一、 实验目的
- 掌握下载Java SDK 软件包的方法;掌握Myeclipse或Eclipse或JetBrains IntelliJ IDEA等开发平台的下载安装方法
- 掌握设置Java 程序运行环境的方法;
- 掌握编写、编译、运行简单的Java Application程序的方法步骤,初步了解java程序的特点和基本结构。
二、 实验要求
- 实验在2学时内完成。
- 1人1组独立完成。
三、 实验设备与环境
JDK, Myeclipse/Eclipse/JetBrains IntelliJ IDEA
- 下载安装JDK :
- 下载安装Myeclipse:
- 下载安装IntelliJ IDEA(Ultimate)
最新版本:
历史版本:
四、 实验内容及指导
- 编写一个Java Application,利用JDK软件包中的工具编译并运行这个程序,使之能够输出字符串信息“Hello World! ”。
实验步骤:
(1).选择并使用合适的源代码编辑器;
(2).创建类Hello.java,在编辑器种编写出程序源代码;
(3).编译程序;
(4).运行程序。
参考内容:
第一次实验要求安装JDK 8并在终点编译运行Java源文件。
JDK是Java开发者工具,是一堆程序组,在window电脑上看上去是一堆文件。
这里推荐使用清华镜像的开源JDK,它能自动安装和配置环境。你可以在C盘的这个位置
C:\Program Files\AdoptOpenJDK\jdk-8.0.265.01-hotspot
找到他。
安装完成后,打开cmd,输入java -version
安装和配置正确的会有:
C:\Users\LUOZH>java -version
openjdk version "1.8.0_265"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_265-b01)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.265-b01, mixed mode)
编写Java源文件 Hello.java :
public class Hello {
public static void main(String[] args){
System.out.println("HelloWorld!");
}
}
一般将Java源文件保存在桌面。先来的桌面看看:
C:\Users\LUOZH>cd Desktop
C:\Users\LUOZH\Desktop>javac Hello.java
C:\Users\LUOZH\Desktop>java Hello
Hello World!
- 编写一个应用程序求三个整数的平均数,原始数字要求从命令行输入。应用程序中main方法的参数String类型的数组args能接受用户从命令行键入的参数。
实验步骤:
(1).创建类,在编辑器种编写出程序源代码
注意:
命令行参数是main方法的String类型的数组args
可以使用Integer.valueOf( )方法将字符串转为整型,例如:
int number= Integer.valueOf(“12321421”)
该方法的参数只能是数字字符串
(2).编译程序;
(3).运行程序。
编写Java源文件Average.java并保存到桌面:
public class Average{
public static void main(String[] args){
int sum = 0;
float n = 0;
for(int l=0;l<args.length;l++){
sum = sum+Integer.valueOf(args[l]);
}
n = sum/args.length;
System.out.println("Average"+n);
}
}
进入终端:
C:\Users\LUOZH\Desktop>javac Average.java
C:\Users\LUOZH\Desktop>java Average 1 2 3
Average2.0
1 2 3是任意给定的整型参数。
从源码中可以看到从命令行输入的参数都放在args[]数组中。
五、 注意事项
- 认真填写实验报告
- 遵守实验室各项制度,服从实验指导教师的安排
- 按规定的时间完成实验
实验2:Java程序设计基础
一、 实验目的
- 掌握 Java 基本数据类型、运算符与表达式。
- 理解 Java 程序语法结构,掌握顺序结构、选择结构和循环结构语法的程序设计方法。
- 理解并掌握数组的使用
二、 实验要求
- 实验在2学时内完成。
- 1人1组独立完成。
三、 实验设备与环境
JDK, Myeclipse/Eclipse/JetBrains IntelliJ IDEA
四、 实验内容及要求
- 在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数 。
例如输入:3 5
输出为:
最大公约数: 1
最小公倍数: 15
参考内容:
package JavaExp;
import java.util.*;
public class Exp2H1{
public static void main(String[] args) {
//input
System.out.println("Please input two inters:");
Scanner s = new Scanner(System.in);
int a = s.nextInt();
int b = s.nextInt();
//output
System.out.println("最大公约数为:"+divisor(a,b));
System.out.println("最小公倍数为:"+(a*b)/divisor(a,b));
}
public static int divisor(int a,int b){
//确保a为大数
if(a > b){
int tmp = a;
a = b;
b = tmp;
}
while(b!=0){
int tmp = b;
a %= b;
b = a;
a = tmp;
}
return a;
}
}
- 用选择排序法,按升序顺序输出一维数组中的元素 。
- 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
例如输入: 10
输出:原排在第4位的人留下了。
要求:熟练掌握Java程序设计中的基本数据类型,表达式,基本控制结构的使用。
五、 注意事项
⒈ 认真填写实验报告
⒉ 遵守实验室各项制度,服从实验指导教师的安排
⒊ 按规定的时间完成实验
实验3:Java的面向对象特性(1)
一、 实验目的
- 通过编程和上机实验理解 Java 语言是如何体现面向对象编程基本思想,了解类的封装方法,以及 如何创建类和对象,了解成员变量和成员方法的特性,掌握 OOP 方式进行程序设计的方法 。
二、 实验要求
- 实验在2学时内完成。
- 1人1组独立完成。
三、 实验设备与环境
JDK, Myeclipse/Eclipse/JetBrains IntelliJ IDEA
四、 实验内容
- 编写一个圆环类 Ring 的 Java 程序。圆环类有 3 个数据成员 , 分别是内半径 innerRadius, 外半径 outerRadius 和颜色 color, 这些属性可以查看 get 也可以重新设置 set, 另外 , 圆环还可以返回其面积 area 。
- 第1题中增加两个static 成员 :圆周率和圆对象个数, 增加两个 static 方法,分别是设置圆周率和显示当前圆对象个数的, 仔细体会静态成员与实例成员的使用方法和区别。
- 设计一个教材类,一个课程类,及一个为某门课程指定参考教材的类。一门课程可以有多本参考教材,再设计一个测试类。
五、 注意事项
⒈ 认真填写实验报告
⒉ 遵守实验室各项制度,服从实验指导教师的安排
⒊ 按规定的时间完成实验
实验4:Java的面向对象特性(2)
一、 实验目的
- 掌握Java的继承与多态,能编写体现类的继承性(成员变量、成员方法、成员变量隐藏)、类的多态性(成员方法重载、构造方法重载)的程序。
- 掌握抽象类与接口
- 掌握Object类的equals方法和toString方法的使用
二、 实验要求
- 实验在2学时内完成。
- 1人1组独立完成。
三、 实验设备与环境
JDK, Myeclipse/Eclipse/JetBrains IntelliJ IDEA
四、 实验内容
1.设计一个简单的学校人事管理系统,管理教师和学生信息。实现教师与学生基本信息的添加、删除、修改、查询。其中编号、姓名、性别、出生日期为共有的,教师包括部门、职称、工资;学生包括高考分数、专业field、班级等。
2. 设计 3 个类 , 分别是学生类 Student, 本科生类 Undergaduate, 研究生类 Postgraduate, 其中 Student 类是一个抽象类 , 它包含一些基本的学生信息如姓名、所学课程、课程成绩等 , 而 Undergraduate 类和 Postgraduate 都是 Student 类的子类 , 它们之间的主要差别是计算课程成绩等级的方法有所不同 , 研究生的标准要比本科生的标准高一些 , 如下表所示。
本科生标准 研究生标准
80-100 优秀 90-100 优秀
70-80 良好 80-90 良好
60-70 一般 70-80 一般
50-60 及格 60-70 及格
50以下 不及格 60以下 不及格
假设某班级里既有本科生也有研究生 , 请编写程序统计出全班学生的成绩等级并显示出来。此题关键是设计一个学生数组 , 既能存放本科生对象 , 又能存放研究生对象。
五、 注意事项
⒈ 认真填写实验报告
⒉ 遵守实验室各项制度,服从实验指导教师的安排
⒊ 按规定的时间完成实验
实验5:异常处理
一、 实验目的
1.掌握异常处理的基本概念,学会使用try…catch块捕获常见的运行期异常。
2. 学会用throws从函数中抛出异常的用法。
3. 学会创建自定义异常,以及手工抛出(产生)异常的throw语句。
二、 实验要求
- 实验在2学时内完成。
- 1人1组独立完成。
三、 实验设备与环境
JDK, Myeclipse/Eclipse/JetBrains IntelliJ IDEA
四、 实验内容
- 编写整除运算程序,要求捕获除数为0异常、数字格式异常、通用型异常。注意要把通用型异常的捕获顺序放在最后。
- 把第1题整除程序改为双精度型实数的除法运算程序,并更改有关提示信息,运行该程序若干次,每次输入不同的数据,观察分析程序的运行结果。
- 在第2题基础上编写自定义异常类(必须继承系统的Exception类),在除数为0时抛出自定义异常,并捕获处理该异常。
五、 注意事项
⒈ 认真填写实验报告
⒉ 遵守实验室各项制度,服从实验指导教师的安排
⒊ 按规定的时间完成实验
实验6:集合练习
一、 实验目的
1.了解Set接口、List接口、Map接口及其主要实现类
2. 掌握ArrayList、 HashMap的使用
3. 掌握泛型类、泛型方法的创建和使用
4. 理解列表与映射、枚举和迭代 等集合类,能够创建并使用集合对象
二、 实验要求
- 实验在2学时内完成。
- 1人1组独立完成。
三、 实验设备与环境
JDK, Myeclipse/Eclipse/JetBrains IntelliJ IDEA
四、 实验内容
1、编写程序练习List集合及泛型的基本使用:
- 创建一个只能容纳String对象名为names的ArrayList集合;
2)按顺序往集合中添加5个字符串对象:“张三”、“李四”、“王五”、“马六”、“赵七”;
3)对集合进行遍历,分别打印集合中的每个元素的位置与内容;
4)首先打印集合的大小,然后删除集合中的第3个元素,并显示删除元素的内容,然后再打印目前集合中第3个元素的内容,并再次打印集合的大小。
2、编写这样一个程序,该程序创建了在某一字符串中出现的字符索引(即,哪个字符出现在字符串中的哪个地方)。从命令行读取该字符串。例如,运行该程序:
java Concordance Hello world
将得到结果为:
{d=[9],o=[4,6],r=[7],w=[5],H=[0],l=[2,3,8],e=[1]}
五、 注意事项
⒈ 认真填写实验报告
⒉ 遵守实验室各项制度,服从实验指导教师的安排
⒊ 按规定的时间完成实验
实验7:文件操作练习
一、 实验目的
- 掌握Java输入输出的结构,
- 掌握Java流的概念和利用流进行文件操作的方法。
二、 实验要求
- 实验在2学时内完成。
- 1人1组独立完成。
三、 实验设备与环境
JDK, Myeclipse/Eclipse/JetBrains IntelliJ IDEA
四、 实验内容
- 编写文本文件复制程序,即把源文件复制到目标文件,运行时用参数方式输入源文件名和目标文件名,设入口主类为FileCopy,则运行方式为:
java FileCopy 源文件名 目标文件名 - 将任意两个文件合并到一个文件,要求采用java命令行方式在控制台按照“源文件1 源文件2 目标文件” 方式录入,注意多种异常处理。
- 编写程序实现将一个文件内容追加到另一个文件内容后,如将D盘file文件夹下的f1.txt追加到E盘根目录下的f2.txt中。(必须异常处理)
五、 注意事项
⒈ 认真填写实验报告
⒋ 遵守实验室各项 制度,服从实验指导教师的安排
⒌ 按规定的时间完成实验
实验8:多线程应用练习
一、 实验目的
- 掌握线程的创建方法。
- 熟悉线程的启动等方法的使用
- 了解线程同步
- 掌握synchronized关键字的使用
二、 实验要求
- 实验在4学时内完成。
- 1人1组独立完成。
三、 实验设备与环境
JDK, Myeclipse/Eclipse
四、 实验内容及指导
- 建立三个线程,并且同时运行它们。当运行时输出线程的名称。
实验步骤:
(1).创建一个Java类
(2).在类中创建三个线程,调用start()方法启动这三个线程
(3).保存文件,调试并编译运行程序。
参考程序运行效果:
- 实现3个类:Storage、Counter和Printer。 Storage类应存储整数。 Counter应创建线程,线程从0开始计数(0,1,2,3…)并将每个值存储到Storage类中。 Printer类应创建一个线程,线程读取Storage类中的值并打印值。编写程序创建Storage类的实例,并创建一个Counter对象和Printer对象操作此实例。
实验步骤:
(1).创建三个类Counter, Printer,Storage
(2).创建TestCounter类,在该类中定义main函数,在main函数中定义Storage对象、Counter对象和 Printer对象,创建Counter线程和Printer线程并启动
(3).保存文件,调试并编译运行程序。
参考程序运行效果:
- 修改第2题的程序,添加适当代码,以确保每个数字都恰好只被打印一次。
实验步骤:
(1).创建三个类Counter, Printer,Storage
(2). 创建TestCounter类,在该类中定义main函数,在main函数中定义Storage对象、Counter1对象和 Printer对象,创建Counter线程和Printer线程并启动
(3).在定义Storage类中的setValue(int i) 和getValue ()方法时使用synchronized关键字,将其定义为同步方法
(4).保存文件,调试并编译运行程序。
参考程序运行效果:
五、 注意事项
⒈ 认真填写实验报告
⒉ 遵守实验室各项制度,服从实验指导教师的安排
⒊ 按规定的时间完成实验
实验9:Java网络编程
一、 实验目的
1、 理解Java网络模型。
2、 掌握InetAddress类的使用。
3、 理解Socket的相关概念、原理。
4、 掌握Java Socket编程,学会创建Java网络服务器和网络客户机。
5、 理解基于UDP协议的Socket的相关概念、原理。
6、 掌握基于UDP协议的Socket编程的步骤及方法。
7、 巩固Java GUI 编程和数据流的使用。
二、 实验要求
- 实验在2学时内完成。
- 1人1组独立完成。
三、 实验设备与环境
JDK, Myeclipse/Eclipse
四、 实验内容及指导
1.基于TCP的Socket编程。使用套接字编写客户—服务器程序,实现客户—服务器交互计算。客户将三角形3个边的长度发给服务器,服务器把计算出的三角形的面积返回给客户。
实验步骤:
(1). 服务器端:Server.java
(a). 调用ServerSocket(int port)创建一个服务器端套接字,并绑定到指定端口上;
(b). 调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字;
©. 调用Socket类的getOutputStream()和getInputStream获取输出流和输入流,使用输入流获取客户端传来的3条边的长度;
(d). 计算面积;
(e). 将面积通过输出流传递到客户端;
(f). 最后关闭通信套接字。
(2). 客户端Client.java
(a). 创建界面,在类的构造器中调用Socket()创建一个流套接字;
(b). 进行事件处理:按钮对象调用addActionListener注册监听,重写actionPerformed方法进行事件处理的具体操作
©. 在事件处理过程中,客户端Socket连接到服务器端,调用Socket类的getOutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收。将三边传到服务器端,从服务器端获取计算出来的面积。最后关闭通信套接字。
客户端参考界面
- 基于UDP的Socket编程。编写一个基于UDP协议的Socket网络通信应用程序,实现如下功能:
①. 客户端能够发送任意的信息给服务器端。
②. 服务器端将收到的字符串变成大写后返还给客户端。
实验步骤:
(1). 接收端
(a). 调用DatagramSocket(int port)创建一个数据报套接字,并绑定到指定端口上;
(b). 调用DatagramPacket(byte[] buf, int length),建立一个字节数组以接收UDP包;
©. 调用DatagramSocket类的receive(),接收UDP包;
(d). 最后关闭数据报套接字。
(2). 发送端
(a). 调用DatagramSocket()创建一个数据报套接字;
(b). 调用DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port),建立要发送的UDP包;
©. 调用DatagramSocket类的send(),发送UDP包;
(d). 最后关闭数据报套接字。
客户端运行结果:
客户端运行结果:
五、 注意事项
⒈ 认真填写实验报告
⒉ 遵守实验室各项制度,服从实验指导教师的安排
⒊ 按规定的时间完成实验