国内永久免费crm系统网站推荐/百度账号购买网站
第11章:枚举和注解
- 总内容
- 引申:自动生成作者和版本
- 枚举
- 引出枚举
- 枚举两种实现方式
- 第一种:自定义枚举类
- 步骤
- 细节及代码
- 小结
- 第二种:enum枚举类
- 步骤
- 细节1
- 细节2
- 用enum实现枚举的代码
- 一个小练习
- Enum成员方法
- JDK内置的基本注解类型
- 注解的理解
- 三个基本的Anotation
- @Override重写父类方法
- @Deprecated某元素已过时
- @SuppressWarnings抑制编译器警告
- 元注解(了解即可)
- 本章作业(枚举类)
总内容
引申:自动生成作者和版本
枚举
引出枚举
- 传统方式会出现问题
属性 + 构造器 + get、set方法 + 在main方法中实例化
- 分析问题
- 解决问题
枚举两种实现方式
第一种:自定义枚举类
步骤
细节及代码
小结
第二种:enum枚举类
步骤
细节1
javap 反编译
反编译发现继承了Enum类
细节2
用enum实现枚举的代码
/*** @author 王胖子* @version 1.0*/
public class Excise {public static void main(String[] args) {System.out.println(Season.SPRING);}
}
enum Season{//; 只写分号表示枚举类为空SPRING("春天","温暖"),WINTER("冬天","寒冷"),SUMMER("夏天","炎热"),AUTUMN("秋天","凉爽");private String name;private String desc;//描述Season(String name, String desc) {this.name = name;this.desc = desc;}public String getName() {return name;}public String getDesc() {return desc;}@Overridepublic String toString() {return "Season{" +"name='" + name + '\'' +", desc='" + desc + '\'' +'}';}
}
一个小练习
Enum成员方法
5.1 常用方法
5.2 讲解常用的方法
5.3 代码演示
补充增强for循环和普通for循环的对比(在代码最下面演示了)
public class Excise {public static void main(String[] args) {//使用Season 枚举类,来演示各种方法Season autumn = Season.AUTUMN;//1. 输出枚举对象的名字System.out.println("1. autumn.name() = " + autumn.name());//2. ordinal()输出的是该枚举对象的次序或编号,从0开始编号System.out.println("1. autumn.ordinal() = " + autumn.ordinal());//3. 从反编译可以看出,values方法,返回的是Season[]//含有定义的所有枚举对象Season[] values = Season.values();System.out.println("====Season.values()返回一个枚举对象的数组====");System.out.println("=====遍历取出枚举对象(增强for循环)=====");for (Season season : values) {//增强for循环//执行流程是:依次从nums数组中取出数据,赋给i,如果取出完毕,则退出forSystem.out.println(season);}//4. valueOf:将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常//执行流程://① 根据输入的"Autumn" 到 Season的枚举对象区查找//② 如果找到了,就返回,如果没找到,就报错Season autumn1 = Season.valueOf("AUTUMN");System.out.println("Season.valueOf(\"AUTUMN\") = " + autumn1);System.out.println(autumn == autumn1);//true//5.compareTo:比较两个枚举常量,比较的是编号//解读://就是把Season.SPRING枚举对象的编号和Season.SUMMER枚举对象的编号比较
// public final int compareTo(E o) {
// Enum<?> other = (Enum<?>)o;
// Enum<E> self = this;
// if (self.getClass() != other.getClass() && // optimization
// self.getDeclaringClass() != other.getDeclaringClass())
// throw new ClassCastException();
// return self.ordinal - other.ordinal;
// }System.out.println("Season.SPRING.compareTo(Season.SUMMER) = " +Season.SPRING.compareTo(Season.SUMMER));//返回的是int -> -3
// 补充增强for循环和普通for循环的对比
// for (Season season:values) {
// System.out.println(season);
// }
// for (int i = 0; i < values.length; i++) {//传统for循环
// System.out.println(values[i]);
// }}
}enum Season {//; 只写分号表示枚举类为空SPRING("春天", "温暖"), WINTER("冬天", "寒冷"),SUMMER("夏天", "炎热"), AUTUMN("秋天", "凉爽");private String name;private String desc;//描述Season(String name, String desc) {this.name = name;this.desc = desc;}public String getName() {return name;}public String getDesc() {return desc;}@Overridepublic String toString() {return "Season{" +"name='" + name + '\'' +", desc='" + desc + '\'' +'}';}
}
输出
JDK内置的基本注解类型
注解的理解
三个基本的Anotation
@Override重写父类方法
@Deprecated某元素已过时
@SuppressWarnings抑制编译器警告
元注解(了解即可)
- 基本介绍
- @Retention(注解可以保留多久)
- @Target(能用于修饰哪些程序元素)
- @Documented(生成文档时,可以看到该类的注释)
- @Inherited(子类自动具有该注解)
本章作业(枚举类)
枚举值的 switch使用
- switch的 () 中,放入枚举对象
switch (yellow)
- 在每个case后,直接写上在枚举类中定义的枚举对象即可
case Black:
枚举类中放着枚举类的对象
Color yellow = Color.Yellow;//引用枚举类对象
yellow.show();//枚举类对象调用枚举类中的方法
/*** @author 王胖子* @version 1.0*/
public class Excise {public static void main(String[] args) {//Yellow是枚举类中的对象Color yellow = Color.Yellow;yellow.show();//演示枚举值的 switch使用//switch的 () 中,方法枚举对象//在每个case后,直接写上在枚举类中定义的枚举对象即可switch (yellow) {case Black:System.out.println("匹配到黑色");break;case Yellow:System.out.println("匹配到黄色");break;default:System.out.println("未匹配到");break;}}
}//接口
interface ShowColor {public void show();
}//枚举类
enum Color implements ShowColor {//这些是枚举类中的对象Red(255, 0, 0), Blue(0, 0, 255),Yellow(255, 255, 0), Black(0, 0, 0),Green(0, 255, 0);private int redValue;private int greenValue;private int blueValue;Color(int redValue, int greenValue, int blueValue) {this.redValue = redValue;this.greenValue = greenValue;this.blueValue = blueValue;}@Overridepublic void show() {System.out.println("redValue = " + redValue + "\ngreenValue = " +greenValue + "\nblueValue = " + blueValue);}
}