PAGE5
《面向对象程序设计》教案
第23讲
教学对象
计算机科学技术专业
授课内容
8.5记录类型
8.6枚举类型
8.7注解类型
8.8内部类
课程标准
教学目标
(一)知识目标
1.学会记录类型的定义和使用
2.学会枚举类型的定义和使用
3.学会常用标准注解类型的使用
4.了解内部类的分类,掌握内部类的使用
(二)能力目标
1.可熟练定义和使用记录类型
2.可熟练定义和使用枚举类型
3.能够熟练使用内部类解决实际问题
教学方法
采用讲授法、演示法、讨论法、案例教学。
学时及分配(第1学时50分钟)
课堂讲授30分钟
课堂练习20分钟
8.5记录类型
8.6枚举类型
学时及分配(第2学时50分钟)
课堂讲授30分钟
课堂练习20分钟
8.7注解类型
8.8内部类
知识点分析
重点:
枚举类型
记录类型
成员内部类、匿名内部类
难点:
枚举在switch中的应用
静态内部类
教学过程设计
内容
方式
问题导入:
Java语言中所有的类都处于一个类层次结构中,除Object类以外,所有的类都只有一个直接父类,即子类与父类之间是单继承的关系,而不允许多重继承。而现实问题类之间的继承关系往往是多继承的关系,为了实现多重继承,Java语言通过接口使得处于不同层次、甚至互不相关的类具有相同的行为。
内容要点
8.5记录类型
在Java程序开发中,我们经常需要定义一些数据类,比如与数据库表交互的JavaBeans类或POJO类,这些类通常使用字段表示数据,然后我们要为该类定义构造方法,为字段定义访问方法和修改方法。这就需要程序员编写大量的代码。
从Java16开始,如果要定义这样的类,可以使用record关键字将它定义为一个记录类型。这种数据类型提供了一种紧凑的语法来声明一种主要用于保存数据的类。
假设定义一个Customer记录类型,它带两个字段name和address。
【程序8-10】Customer.java
packagecom.boda.xy;
此处相当于构造方法publicrecordCustomer(Stringname,Stringaddress){
此处相当于构造方法
//这里可以定义记录类型的成员
}
这里,类型名后面是一对括号,里面是字段的声明,相当于定义一个构造方法。记录类型与其他类型一样被编译成类(.class)文件。编译器将自动添加构造方法、equals()方法、hashCode()方法和toString()方法,并且为每个实例变量添加访问方法。
【程序8-11】CustomerDemo.java参见教材。
在记录的主体中,还可以声明static成员、构造方法和实例方法,例如:
自定义的构造方法必须明确调用带参数构造方法publicCustomer(Stringname){
自定义的构造方法必须明确调用带参数构造方法
this(name,null);
}
一个静态变量publicstaticStringinfo=客户;
一个静态变量
一个静态方法
一个静态方法
publicstaticvoidshow(){
System.out.println(显示:+info);
}
一个实例方法
一个实例方法
publicvoidshowName(){
System.out.println(姓名:+name);
}
在记录体中还可以覆盖超类Record中定义的方法:
@Override
publicStringtoString(){
return姓名:+name+,地址:+address;
}
@Override
publicinthashCode(){
returnObjects.hash(name,address);
}
在记录类型中用户还可以定义自己的方法和构造方法,但通常不这样做。记录类型主要是解决用于存储数据的普通类的一个常见问题,从为类编写多行代码简化为只需一行代码,这大大优化了代码并节省了程序员的录入时间。
下面对记录类型做一简单总结:
记录类型默认继承了java.lang.Record类,不能显式继承其他类。
记录类型是final的,即它不可以被继承。
每个成员变量都被加上privatefinal,对象创建后它们就不可变。
每个成员变量都提供了public访问方法,如name(),但不提供修改方法。
提供了带所有参数的构造方法、toString