枚举和注解
枚举(Enumeration)
基本介绍
一组常量的集合,创建enum枚举类会默认继承Enum类
种类
自定义枚举
实现步骤:
- 构造器私有化;
- 只使用get方法,禁止set方法;
- 在类内部创建对象(修饰符:
public static final
);
package com.java_learn.Enumeration_and_Annotations.Enumeration;
/**
* @author ECHOm6
* @version 1.0
* @Summary 自定义枚举的使用,创建对象繁琐,引出enum实现枚举:(Enumeration03.java)
*/
public class Enumeration02 {
public static void main(String[] args) {
System.out.println(Sanson01.SPRING);
System.out.println(Sanson01.SUMMER);
System.out.println(Sanson01.AUTUMN);
System.out.println(Sanson01.WINTER);
}
}
class Sanson01{
private String name;
private String desc;
public static final Sanson01 SPRING=new Sanson01("春天","生机盎然");
public static final Sanson01 SUMMER=new Sanson01("夏天","炎炎烈日");
public static final Sanson01 AUTUMN=new Sanson01("秋天","萧条");
public static final Sanson01 WINTER=new Sanson01("冬天","漫天飞雪");
//上述创建对象较为繁琐,引出enum实现枚举:(Enumeration03.java)
/*自定义实现枚举:
1.私有化构造器,放置new
2.去除set方法,这样可控制只能读取不能修改
3.在类里面直接创建固定对象
*/
private Sanson01(String name, String desc) {
this.name = name;
this.desc = desc;
}
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
@Override
public String toString() {
return "Sanson01{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
使用enum关键字实现枚举
实现步骤:
- 私有化构造器
- 禁用set方法
- class 替换成 enum ,把枚举常量写在首行;
常量名(实参列表)
若构造器为无参构造器,可省略参数列表
package com.java_learn.Enumeration_and_Annotations.Enumeration;
/**
* @author ECHOm6
* @version 1.0
* @Summary 使用enum实现枚举类
*/
public class Enumeration03 {
public static void main(String[] args) {
}
}
enum Season03{
SPRING("春天","温暖"),
SUMMER("夏天","炎热"),
AUTUMN("秋天","萧条"),
WINTER("冬天","寒冷")
;
/*enum实现枚举类:
1.私有化构造器
2.使用get方法,禁用set方法
3.枚举需要放在第一行,每个常量间用逗号隔开
*/
private String name;
private String desc;
Season03(String name, String desc) {
this.name = name;
this.desc = desc;
}
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
@Override
public String toString() {
return "Season03{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
enum枚举类的成员方法
方法名 | 解释 |
---|---|
name() | 返回该常量名 |
ordinal() | 返回该常量编号,默认编号从0开始 |
values() | 返回枚举对象数组 |
valuesOf(字符串) | 将字符串转换成枚举对象,前提该字符串已经在枚举类中;否则异常 |
compareTo(形参) | 方法比较两个常量位置编号 |
package com.java_learn.Enumeration_and_Annotations.Enumeration;
/**
* @author ECHOm6
* @version 1.0
* @Summary enum枚举类的成员方法
*/
public class enum_MemberMethod {
public static void main(String[] args) {
//name()方法返回该常量名
System.out.println(Emm.FID.name());
//ordinal()方法返回该常量编号,默认从0开始
System.out.println(Emm.MOD.ordinal());
//values()方法返回枚举对象数组
Emm[] arr= Emm.values();
for (Emm i : arr){//增强for循环
System.out.println(i);
}
//valuesOf()方法,将字符串转换成枚举对象,前提该字符串已经在枚举类中;否则异常
System.out.println(Emm.valueOf("MOD"));
//compareTo方法比较两个常量位置编号,返回 前者编号-后者编号
System.out.println(Emm.MOD.compareTo(Emm.MOD));
}
}
enum Emm{
MOD,FID,UPD;
}
枚举细节与注意事项
enum枚举类不可再继承其他类,因为底层已经继承Enum类;
但是可以实现接口
注解(Annotation)
基本介绍
- 注解也称为元数据(Metadata);用于修饰包、类、方法、属性、构造器、局部变量等数据信息。
- 和注释一样,注解不影响程序逻辑,但是注解可以编译或运行;相当于嵌入代码中的补充信息。
- JavaSE中使用简单,如:标记过时功能,忽略警告等。JavaEE中使用更加重要,如:配置应用程序任意切面,代替JavaSE中遗留的冗余代码和XML配置等。
语法
在注解前加上@,并且把该注解当成修饰符;用于修饰它支持的程序元素
- @Override:限定某个方法,该方法重写父类方法;该注解只能用于方法
- @Deprecated:表示某个程序元素(类、方法等)过时(不推荐使用,但还可以使用)
- @SuppressWarnings({"抑制警告类型"}):抑制编译器警告;作用在类、方法
四种元注解
修饰注解的注解,称之为元注解
- @Target:指定注解可以作用的位置
- @Retention:指定注解作用范围(SOURCE/CLASS/RUNTIME)
- @Documented:指定注解是否在javadoc中体现
- @Inherited:子类继承父类注解