一、实验目的
★专题:核心专题技术★
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、掌握和理解导入包的类。
二、实验内容和主要步骤
★专题:核心专题技术★
- 枚举基础和应用
- 包装类和自动装箱
- 异常基础实验
- 包访问权限实验
- [选做]内部类型高级特性
- 泛型基础
- [选做]反射和注解——一个综合应用
★专题:接口基础和面向接口编程★
- 字符串处理
- 数有关类:数学Math类、随机数类Random、大数类
- 时日API
- Java集合类之一LSM
- Java集合类之二Collections类
- 其它几个常用类和接口
★专题:文件IO和数据库编程★
- File类基础操作
- 字节流IO操作
- 字符流IO操作
- 随机流IO操作
- 数据库编程任务一:MySQL服务器安装
- 数据库编程任务二:JDBC数据库编程步骤初探
- 数据库编程任务三:插入一条记录
- 数据库编程任务四:修改记录
- 数据库编程任务五:删除记录
三、实验结论和思考
1、完成“6.5.1枚举基础和应用”中【3、星期枚举类——能给出“星期几”和“周几”的版本】的两个空。
⑴答:zhou="周"+xq.charAt(2);
⑵答:weeks.getzhou()
2、结合实验专题6的“6.5.6泛型基础”中【1、泛型与集合API结合带来的好处】GenericTest程序中两个不同版本List的写法,描述使用泛型的好处。
答:将导致运行时异常的隐患提前到编译阶段被发现和排除,提高编码健壮性,在一定程度上提高了软件的安全性,防止出现低级的失误
3、请完整地阅读以下题目,并设计程序以完成功能:
(1)设计一个MyStudent类,有数据成员sno(学号)和sname(姓名)及其相应的getter和setter方法,且带无参及有参共两个构造方法。
(2)MyStudent类对象具有按学号的大小进行相互比较的行为(升序);
(3)实例化4个MyStudent并将其放进ArrayList<MyStudent>列表中,然后使用Collections的静态sort方法对列表进行排序,最后在屏幕上输出排序结果。
作答要求:
(1)将调试通过的源代码粘贴在下方。
(2)将一次执行的结果截图粘贴在下方。
答:
public class Mystudent implements Comparable<Mystudent>{
public int sno;
public String sname;
public int getsno() {
return sno;
}
public void setsno(int sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
Mystudent(){
}
Mystudent(int sno,String sname){
this.sno=sno;
this.sname=sname;
}
@Override
public String toString() {
return "Mystudent [sno=" + sno + ", sname=" + sname + "]";
}
@Override
public int compareTo(Mystudent s) {
return this.getsno()-s.getsno();//升序//sno是int型
// return s.getsno()-this.getsno();//降序
}
}
package D3;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static java.lang.System.*;
public class Test {
public static void main(String[] args )
//创建集合
List<Mystudent> list = new ArrayList<>();
list.add(new Mystudent(2021,"刘健波"));
list.add(new Mystudent(2020,"吴铭涛"));
list.add(new Mystudent(2023,"夏至隆"));
list.add(new Mystudent(2022,"方耿豪"));
Collections.sort(list);
//遍历集合
for (int i = 0; i < list.size(); i++) {
Mystudent stu = list.get(i); //这个地方需要注意,需要这样创建
out.println("学生学号:" + stu.sno + " "+"学生姓名:" + stu.sname);
}
//for(Mystudent s:list) {
//out.println(s.toString());
//}
}
}
4、在实验专题8的FileRecursionList1程序基础上,编写修改程序,实现:在递归结束后打印输出所遍历的目标文件夹中含有的目录个数和文件个数。
作答要求:
(1)将调试通过的源代码粘贴在下方。
(2)将一次执行的结果截图粘贴在下方。
答:
import java.io.File;
public class FileRecursionList1 {
static int f=0;//文件个数
static int D=0;//目录个数
public static void print(File file) {
if (file != null) {
if (file.isDirectory()) {
File f[] = file.listFiles();
if (f != null) {
for (int i = 0; i < f.length; i++) {
D++;
print(f[i]);
}
}
} else {
f++;
}
}
}
public static void main(String[] args) {
File my = new File("D:\\测试目录");
print(my);
System.out.println(my+" 含有的目录个数为"+D);
System.out.println(my+" 含有的文件个数为"+f);
}
}
5、实验专题8中“8.5.2字节流IO操作”的“1、4个实现文件复制程序的性能比较”。先准备好比较公平的测试环境(比如把不必要的其他程序退出),然后把4个程序的 某次运行后输出的毫秒时间值粘贴到下面的表格中,并稍作结论性地描述。
答:(1)
各程序复制文件所需的时间(单位:ms)
非缓冲 |
缓冲 | |
逐字节 |
26027 |
8755 |
字节数组 |
206 |
98 |
(2)结论:
使用缓冲区提高了操作效率,字符流(一次可以处理一个缓冲区)一次操作比字节流(一次一个字节)效率高。
四、实验心得(必须填写)
通过此次实验,我了解到了泛型是java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。泛型将导致运行时异常的隐患提前到编译阶段被发现和排除,提高编码健壮性,在一定程度上提高了软件的安全性,防止出现低级的失误。