《Java语言程序设计》实验指导手册
前言
本实验指导旨在配合《Java语言程序设计》理论课程,通过一系列精心设计的实验,帮助学生巩固理论知识,提升编程实践能力、问题解决能力和工程素养,实验内容由浅入深,从基础的语法练习到综合的项目开发,覆盖了Java SE的核心知识点。
学习目标:
- 掌握环境: 熟练使用JDK、IDE(如IntelliJ IDEA或Eclipse)进行Java程序的编写、编译、调试和运行。
- 夯实基础: 深入理解Java基本语法、数据类型、流程控制、数组和方法。
- 理解面向对象: 熟练运用类、对象、封装、继承、多态等面向对象思想进行程序设计。
- 熟悉核心API: 掌握常用类(如
String,Math,Date)、集合框架(List,Set,Map)、I/O流和异常处理机制。 - 提升能力: 具备阅读和分析代码、调试程序、设计小型应用以及团队协作开发的能力。
第一部分:实验环境搭建
在开始实验之前,必须正确配置开发环境。
实验目标:
- 安装并配置Java Development Kit (JDK)。
- 安装并配置集成开发环境。
- 编写并成功运行第一个Java程序。
实验步骤:
-
安装JDK:
- 访问Oracle官网或OpenJDK官网,下载与你操作系统匹配的最新LTS(长期支持)版本的JDK。
- 运行安装程序,记住安装路径(
C:\Program Files\Java\jdk-17)。 - 配置环境变量:
- 新建系统变量
JAVA_HOME,值为你的JDK安装路径。 - 编辑系统变量
Path,新建一项,值为%JAVA_HOME%\bin。
- 新建系统变量
- 打开命令行(CMD),输入
java -version和javac -version,如果显示版本号,则安装成功。
-
安装IDE:
- 推荐 IntelliJ IDEA (Community Edition 免费版): 功能强大,对Java支持最好。
- 备选 Eclipse: 经典开源IDE。
- 下载并安装IDE,初次运行时选择配置JDK,指向你刚才安装的
JAVA_HOME。
-
编写第一个程序 "Hello, World!":
- 在IDE中新建一个Java项目。
- 在项目中创建一个名为
HelloWorld.java的文件。 - 输入以下代码:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } - 运行程序(通常点击绿色三角按钮),在控制台应看到输出
Hello, World!。
第二部分:基础实验
这部分实验旨在巩固Java的基础语法和核心概念。
Java基础语法与流程控制
- 实验目的:
- 掌握Java基本数据类型、变量、运算符的使用。
- 熟练运用
if-else、switch、for、while、do-while等流程控制语句。
- 成绩等级评定: 编写一个程序,输入一个学生的百分制成绩,输出其对应的等级(A: 90-100, B: 80-89, C: 60-79, D: 0-59, E: 成绩无效)。
- 素数判断: 编写一个方法,判断一个整数是否为素数(质数),并在
main方法中测试。 - 九九乘法表: 使用嵌套
for循环,在控制台打印出标准的九九乘法表。
方法与数组
- 实验目的:
- 理解方法的定义、调用、参数传递和返回值。
- 掌握一维数组和二维数组的声明、初始化、遍历和常用操作。
- 数组操作工具类: 创建一个包含
main方法的类,并实现以下静态方法:printArray(int[] arr): 打印数组元素。findMax(int[] arr): 找出数组中的最大值。reverseArray(int[] arr): 反转数组。bubbleSort(int[] arr): 使用冒泡排序对数组进行升序排序。
- 二维数组应用: 创建一个3x3的二维数组,并使用循环为其赋值(赋值为行索引和列索引的和),然后打印出这个矩阵。
- 数组操作工具类: 创建一个包含
面向对象基础(类与对象)
- 实验目的:
- 掌握类的定义,包括成员变量(属性)和成员方法。
- 理解对象的创建和使用(实例化)。
- 掌握构造方法的作用和重载。
- “学生”类: 设计一个
Student类。- 属性:
id(学号),name(姓名),age(年龄)。 - 构造方法: 至少提供一个无参构造方法和一个带参构造方法。
- 方法:
study()(打印“XXX正在学习”),introduce()(自我介绍)。
- 属性:
- 测试类: 在
main方法中,创建Student类的多个对象,并调用其方法,观察输出结果。
- “学生”类: 设计一个
面向对象进阶(封装、继承、多态)
- 实验目的:
- 理解并应用封装(
private关键字和getter/setter方法)。 - 掌握继承的实现和
super关键字的使用。 - 理解多态的概念,并能通过方法重写和方法重载体现。
- 理解并应用封装(
- “形状”继承体系:
- 创建一个父类
Shape,包含一个抽象方法calculateArea()。 - 创建子类
Circle和Rectangle,继承Shape,并重写calculateArea()方法。 - 在测试类中,创建
Shape类型的数组,分别存入Circle和Rectangle对象,然后遍历数组并调用calculateArea()方法,观察多态行为。
- 创建一个父类
- “员工”类体系:
- 创建一个
Employee基类,包含name,salary等属性,以及work()方法。 - 创建
Manager和Developer子类,继承Employee,并重写work()方法,描述各自的工作内容。 - 在
Employee类中添加一个getDetails()方法,在子类中重写该方法,提供更详细的信息。
- 创建一个
- “形状”继承体系:
第三部分:核心API应用
这部分实验深入Java标准库,学习解决实际问题的常用工具。
字符串处理与常用类
- 实验目的:
- 熟练掌握
String类的常用方法(length,charAt,substring,indexOf,replace,split等)。 - 了解
StringBuilder和StringBuffer的区别与应用场景。 - 使用
Math,Date,Calendar等常用工具类。
- 熟练掌握
- 字符串反转与统计: 编写一个程序,接收用户输入的一行字符串,实现以下功能:
- 将字符串反转。
- 统计其中字母、数字、空格和其他字符的数量。
- 敏感词过滤: 定义一个包含敏感词的数组,再输入一段文本,将文本中的所有敏感词替换为。
- 字符串反转与统计: 编写一个程序,接收用户输入的一行字符串,实现以下功能:
集合框架
- 实验目的:
- 掌握
List,Set,Map三大集合接口的特点和区别。 - 熟练使用
ArrayList,LinkedList,HashSet,HashMap等常用实现类。 - 掌握集合的遍历方式(迭代器、for-each循环)。
- 掌握
- 使用
List存储学生信息: 创建一个ArrayList<Student>(使用实验三的Student类),添加多个学生对象,然后遍历并打印所有学生的信息。 - 使用
Set去除重复: 创建一个HashSet<String>,向其中添加一些重复的字符串,最终遍历集合,观察重复元素已被自动去除。 - 使用
Map统计单词频率: 读取一段英文文本,使用HashMap<String, Integer>来统计每个单词出现的次数。
- 使用
异常处理
- 实验目的:
- 理解异常的概念和体系结构。
- 掌握
try-catch-finally语句块的使用。 - 学会使用
throws声明和throw抛出异常。
- 文件读取异常处理: 尝试读取一个不存在的文件,使用
try-catch捕获FileNotFoundException,并给出友好的错误提示。 - 数组越界异常处理: 创建一个长度为5的数组,在代码中尝试访问索引为5的元素,捕获
ArrayIndexOutOfBoundsException。 - 自定义异常: 设计一个
InvalidAgeException(自定义异常),在Student类的setAge方法中,如果年龄小于0或大于120,则抛出此异常。
- 文件读取异常处理: 尝试读取一个不存在的文件,使用
I/O流与文件操作
- 实验目的:
- 理解Java I/O流的分层体系(字节流 vs. 字符流,节点流 vs. 处理流)。
- 掌握使用
File类进行文件和目录操作。 - 学会使用
FileReader/FileWriter和BufferedReader/BufferedWriter进行文本文件的读写。
- 文件信息查看: 编写一个程序,接收一个文件路径,使用
File类输出该文件/目录的名称、大小、是否可读、是否可写、最后修改时间等信息。 - 文本文件复制: 编写一个程序,将一个文本文件(如
source.txt复制到另一个文本文件(如target.txt)中。 - 日志记录: 创建一个简单的日志记录程序,每次运行时,将当前时间戳和一条日志信息(如“用户登录成功”)追加写入到一个
log.txt文件中。
- 文件信息查看: 编写一个程序,接收一个文件路径,使用
第四部分:综合项目实践
将所学知识融会贯通,完成一个小型但完整的应用。
简易图书管理系统
-
项目目标: 开发一个控制台版的图书管理系统,实现对图书的增、删、改、查等基本功能。
-
技术要求:
- 使用面向对象思想设计。
- 使用
ArrayList或HashMap来存储图书数据。 - 使用
Scanner类获取用户输入。 - 使用I/O流实现数据的持久化(程序关闭后,图书信息不丢失)。
-
功能模块:
- 图书类:
- 属性:
id(唯一标识),title(书名),author(作者),isBorrowed(是否借出)。 - 方法:
toString()(用于打印图书信息)。
- 属性:
- 图书管理器类:
- 数据存储: 使用
ArrayList<Book>。 - 核心功能方法:
addBook(Book book): 添加新书。deleteBook(String id): 根据ID删除图书。findBook(String keyword): 根据书名或作者查找图书。borrowBook(String id): 借阅图书。returnBook(String id): 归还图书。listAllBooks(): 显示所有图书。
- 数据持久化:
saveToFile(): 将图书列表保存到文件(如books.dat)。loadFromFile(): 从文件加载图书列表。
- 数据存储: 使用
- 主程序类:
- 提供菜单驱动的用户界面。
- 在程序启动时调用
loadFromFile(),退出前调用saveToFile()。 - 根据用户选择调用管理器类的相应方法。
- 图书类:
第五部分:实验报告撰写规范
每完成一个实验,都应提交一份实验报告,格式建议如下:
- 实验名称: 如“实验三:面向对象基础”。
- 实验目的: 简述本次实验要达成的目标。
- 实验环境: JDK版本、操作系统、IDE名称及版本。
- 实验原理: 简要介绍实验所涉及的核心理论知识。
- 与步骤:
- 描述实验的具体任务。
- 详细记录关键的实现步骤和遇到的问题及解决方案。
- 核心代码:
贴出关键类或方法的核心代码,并进行必要的注释说明。
- 实验结果与分析:
- 附上程序运行成功的截图。
- 对实验结果进行分析,讨论代码的优缺点或可以改进的地方。
- 实验总结与心得:
- 总结本次实验学到的知识和技能。
- 反思在实验过程中遇到的困难、解决方法以及获得的感悟。
