实验项目D、Java应用专题编程
一、实验目的 ★专题:核心专题技术★ 1、理解枚举的使用。 2、掌握包装类及自动装箱拆箱机制。 3、掌握异常的使用。 4、掌握包的使用。 5、理解内部类、泛型、反射和注解等专题技术。 ★专题:常用类和接口★ 1、初步掌握字符串类的常用方法。 2、初步掌握日期和日期格式类的使用。 3、了解大数类的使用。 4、初步了解和掌握Java集合框架。 5、掌握Java包装类的基本用法。 6、初步掌握几个常用类和接口的含义和使用。 ★专题:文件IO和数据库编程★ 1、掌握File类的使用。 2、掌握字节流IO的操作。 3、掌握字符流IO的操作。 4、初步掌握随机流操作。 5、掌握Java数据库开发(JDBC操作)的准备。 6、掌握和理解导入包的类。 二、实验内容和主要步骤 ★专题:核心专题技术★ 1.枚举基础和应用 2.包装类和自动装箱 3.异常基础实验 4.包访问权限实验 5.[选做]内部类型高级特性 6.泛型基础 7.[选做]反射和注解——一个综合应用 ★专题:接口基础和面向接口编程★ 1.字符串处理 2.数有关类:数学Math类、随机数类Random、大数类 3.时日API 4.Java ### 实验项目D、Java应用专题编程 #### 一、实验目的详解 ##### 核心专题技术 1. **理解枚举的使用** - 枚举是一种特殊的类,用于定义一组固定的常量。在Java中,枚举类型可以通过`enum`关键字来定义。 - 枚举类型的实例是有限的并且在编译期间就已经确定,这有助于减少运行时错误,提高代码可读性和可维护性。 - 枚举提供了很多有用的默认行为,比如toString()、compareTo()等方法,这些默认实现简化了枚举类型的使用。 2. **掌握包装类及自动装箱拆箱机制** - Java中的基本类型如int、double等不能直接用于泛型容器中,这时就需要使用到它们对应的包装类,例如Integer、Double等。 - 自动装箱是指将基本类型自动转化为其对应的包装类,而自动拆箱则是相反的过程。 - 这种机制使得开发者可以更方便地在基本类型和对象之间进行转换,减少了手动转换的工作量。 3. **掌握异常的使用** - 异常处理是Java中重要的机制之一,用于处理程序运行过程中可能出现的错误情况。 - Java中的异常分为两大类:`Error`和`Exception`。通常,我们只捕获和处理`Exception`,而`Error`一般表示无法恢复的情况。 - 使用try-catch-finally语句块可以有效地处理异常,还可以通过throw关键字自定义异常。 4. **掌握包的使用** - 包是用来组织类的一种方式,可以避免命名冲突。 - 在Java中,包通过`package`声明来创建,导入其他包中的类则使用`import`语句。 - 包也可以嵌套,即一个包下可以包含子包。 5. **理解内部类、泛型、反射和注解等专题技术** - **内部类**是一种定义在另一个类内部的类,它可以访问外部类的私有成员,包括变量和方法。 - **泛型**提供了一种类型参数化的机制,可以创建高度复用的类或方法,同时保持类型安全性。 - **反射**允许程序在运行时获取类的信息,并创建和操作对象,这对于框架和工具库特别有用。 - **注解**提供了一种灵活的方式来添加元数据到程序元素上,可以被编译器或其他工具用来生成文档或代码等。 ##### 常用类和接口 1. **初步掌握字符串类的常用方法** - `String`类提供了丰富的操作字符串的方法,如`length()`、`charAt()`、`indexOf()`、`substring()`等。 - 了解不可变性的概念对于正确使用字符串非常重要。 2. **初步掌握日期和日期格式类的使用** - `Date`类表示特定瞬时点的时间戳,而`Calendar`类则提供了一个更为灵活的日期时间处理框架。 - `SimpleDateFormat`用于日期和时间的格式化和解析,可以根据不同的区域设置不同的日期时间格式。 3. **了解大数类的使用** - `BigInteger`和`BigDecimal`用于处理超出基本数据类型范围的大整数和浮点数。 4. **初步了解和掌握Java集合框架** - Java集合框架提供了多种用于存储和检索对象的数据结构,如`List`、`Set`、`Map`等。 - `ArrayList`、`LinkedList`、`HashSet`、`HashMap`等是常用的集合实现。 5. **掌握Java包装类的基本用法** - 包装类不仅提供了基本类型的对象封装,还提供了一些实用的方法,如`parseInt()`、`valueOf()`等。 6. **初步掌握几个常用类和接口的含义和使用** - 如`Math`类提供了基本的数学运算方法,`Random`类用于生成随机数等。 ##### 文件IO和数据库编程 1. **掌握File类的使用** - `File`类用于处理文件和目录,包括创建、删除、重命名等操作。 - 使用`File`类可以获取文件的各种属性,如大小、最后修改时间等。 2. **掌握字节流IO的操作** - `InputStream`和`OutputStream`是所有字节流的基类,分别用于读取和写入字节数据。 - 常见的子类包括`FileInputStream`、`FileOutputStream`等。 3. **掌握字符流IO的操作** - `Reader`和`Writer`是所有字符流的基类,用于读取和写入字符数据。 - 常用的字符流包括`FileReader`、`FileWriter`等。 4. **初步掌握随机流操作** - `RandomAccessFile`类提供了一种灵活的方式访问文件,支持随机读写操作。 5. **掌握Java数据库开发(JDBC操作)的准备** - JDBC(Java Database Connectivity)是Java中用于连接数据库的标准API。 - 使用JDBC可以执行SQL查询、更新数据库表等操作。 6. **掌握和理解导入包的类** - 导入包中的类是Java程序的基础,正确地使用`import`语句可以避免类名冲突。 #### 二、实验内容和主要步骤 - **枚举基础和应用** - 枚举的基本语法以及如何定义和使用枚举类型。 - 枚举类型的成员变量和方法。 - **包装类和自动装箱** - 包装类的特点及其与基本类型之间的关系。 - 自动装箱和拆箱的具体应用。 - **异常基础实验** - 异常处理的基本流程。 - try-catch-finally语句的使用。 - **包访问权限实验** - 创建和使用包的步骤。 - 不同访问修饰符的作用。 - **泛型基础** - 泛型类和泛型方法的定义。 - 泛型的实际应用案例。 - **反射和注解** - 反射的基本原理及其应用。 - 注解的定义和使用。 - **字符串处理** - `String`类的常见方法。 - 字符串的拼接和分割等操作。 - **数有关类** - `Math`类提供的数学运算方法。 - `Random`类生成随机数。 - `BigInteger`和`BigDecimal`类的使用。 - **时日API** - `Date`类和`Calendar`类的使用。 - `SimpleDateFormat`格式化日期时间。 - **Java集合类之一 LSM25** - 掌握`List`、`Set`等集合的特性和使用。 - **Java集合类之二 Collections类** - `Collections`类提供的工具方法。 - 排序、查找等功能的实现。 - **其它几个常用类和接口** - 如`BufferedReader`、`BufferedWriter`等用于高效文件读写的类。 - **File类基础操作** - 创建、删除文件/目录。 - 获取文件属性。 - **字节流IO操作** - 读取和写入字节流数据。 - 文件复制示例。 - **字符流IO操作** - 读取和写入字符流数据。 - 字符编码问题的处理。 - **随机流IO操作** - 随机读写文件数据。 - 随机访问文件的示例。 - **数据库编程任务** - 安装和配置MySQL数据库。 - 使用JDBC连接数据库。 - SQL查询和更新操作。 #### 三、实验结论和思考 1. **枚举的应用** - 实现一个枚举类可以方便地管理和表示一组相关的常量值。 - 枚举可以提供更好的类型安全性和易于维护的代码结构。 2. **泛型的好处** - 使用泛型可以确保类型安全,减少强制类型转换的错误。 - 泛型使得代码更加通用,提高了代码的重用性。 - 泛型的使用可以减少代码量,简化了集合的处理逻辑。 3. **设计和实现MyStudent类** - 定义一个名为`MyStudent`的类,包含`sno`和`sname`两个私有成员变量,并提供getter和setter方法。 - 实现`Comparable`接口,使得`MyStudent`对象可以根据`sno`属性进行排序。 - 使用`ArrayList`和`Collections.sort()`方法对`MyStudent`对象列表进行排序。 示例代码如下: ```java class MyStudent implements Comparable<MyStudent>{ private int sno; private String sname; public MyStudent(String sname, int sno) { this.sno = sno; this.sname = sname; } public MyStudent() { } public void setSname(String sname) { this.sname = sname; } public void setSno(int sno) { this.sno = sno; } public String getSname() { return sname; } public int getSno() { return sno; } @Override public String toString() { return sname + ":" + sno; } @Override public int compareTo(MyStudent other) { return Integer.compare(this.sno, other.sno); } } import java.util.ArrayList; import java.util.Collections; public class MyStudentTest { public static void main(String[] args) { ArrayList<MyStudent> list = new ArrayList<>(); list.add(new MyStudent("张三", 1001)); list.add(new MyStudent("李四", 1002)); list.add(new MyStudent("王五", 1003)); list.add(new MyStudent("赵六", 1004)); Collections.sort(list); for (MyStudent student : list) { System.out.println(student); } } } ``` 这段代码展示了如何创建`MyStudent`类,如何实例化多个对象并将它们添加到`ArrayList`中,最后使用`Collections.sort()`方法根据学号进行排序,并输出排序后的结果。