2020-10-07课堂笔记
主知识点
1.枚举enum
特点:
- 普通类class可以使用extends去继承其他类,而enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum(java是单一继承)
- 枚举通常具有枚举实例,实例之间以逗号分隔,以分号结尾
- 枚举也可以有自己的属性和方法,以及构造函数等
- 枚举也可以像普通类一样去实现接口
- 在哪些情形下使用枚举:
比如列举四季,12月,一周七天,一个系统的管理员身份,教师身份,学生身份等能被列出的字符串
2.映射
- class
- constructor
- modifier
- field
- method
Class class = Class.forName("com.ddb.javacore.reflect.Person"); //包名+类名
Student student = class.newInstance(); //调用了Employee的无参数
//构造器
Constructor c=clazz.getConstructor([可选参数]);
Constructor [] c=clazz.getConstructors();
//成员变量
Field field=clazz.getDeclaredField([可选参数]);
Field []field=clazz.getDeclaredFields();
// 权限不够时,set方法或者暴力打破权限
field.setAccessible(true); //使用反射机制可以打破封装性,但导致了java对象的属性不安全。
field.set(student,"值");
3.枚举案例(以四季为例)
1.创建枚举对象
public enum Season {
Spring("和风",0){
@Override
public void animalshout(){
System.out.println("青蛙叫");
}
},Summer("炎热",1),Autumn("凉爽",2),Winter("寒冬",3);
String name;
int num;
private Season(String name,int num) {
// TODO Auto-generated constructor stub
this.name=name;
this.num=num;
}
public void animalshout() {
// TODO Auto-generated method stub
System.out.println("没有动物叫!");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
2.主函数内测试枚举类
System.out.println("季节:"+Season.Spring+"描述:"+Season.Spring.getName()+"序号:"+Season.Spring.getNum());
Season.Spring.animalshout();//调用重写后的方法
Season.Summer.animalshout();//没有重写故调用之前的方法
运行结果:
季节:Spring描述:和风序号:0
青蛙叫
没有动物叫!
3.遍历枚举对象
for (Season e : Season.values()) {
System.out.println(e.toString());
}
遍历结果:
Spring
Summer
Autumn
Winter