java进阶(四)_枚举类与注解
枚举类与注解
1.1枚举类的使用
- 枚举类理解:类的对象只有有限个的,确定的。我们称此类为枚举类
- 当需要定义一组常量时,建议使用枚举类。
- 如果枚举类只有一个对象,则可以作为单列模式的实现方式。
1.2如何定义枚举类
- 方式一:jdk5.0之前,自定义枚举类
- 方式二:jdk5,可以使用enum关键字定义枚举类
public class SeasonTest {
public static void main(String[] args) {
Season1 autumn = Season1.AUTUMN;
System.out.println(autumn);
}
}
//自定义枚举类,这个是继承于Object类
class Season{
//1.声明Season对象的属性:private final修饰,因为枚举类对象的 属性不应被允许改动
private final String seasonName;
private final String seasonDesc;
//2.私有化类的构造器,并给对象的属性赋值
private Season(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//3. 提供当前枚举类的多个对象
public static final Season SPRING=new Season("春天","春暖花开");
public static final Season SUMMER=new Season("夏天","夏日炎炎");
public static final Season AUTUMN=new Season("秋天","秋高气爽");
public static final Season WINTER=new Season("冬天","冰天雪地");
//4.其他诉求:获取枚举类对象的属性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
//4.其他诉求1:提供toString()
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
}
//使用enum关键字定义枚举类,
// 定义的枚举类默认继承于java.lang.Enum类
enum Season1{
//1. 提供当前枚举类的多个对象,多个对象之间用逗号隔开,末尾对象用;结束
SPRING("春天","春暖花开"),
SUMMER("夏天","夏日炎炎"),
AUTUMN("秋天","秋高气爽"),
WINTER("冬天","冰天雪地");
//2.声明Season对象的属性:private final修饰
private final String seasonName;
private final String seasonDesc;
//2.私有化类的构造器,并给对象的属性赋值
private Season1(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//4.其他诉求:获取枚举类对象的属性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
}
1.3 Enum类的常用方法
- values()方法:返回枚举类型的对象数组。该方法可以很方便的遍历所有的枚举值;
- valueOf(String str):可以把一个字符串转为对应的枚举类对象。返回枚举类中对象名是objname的对象,要求字符串必须是枚举类对象的”名字“。如不是,会有运行时异常: lllegalArgumentException.
- toString():返回当前枚举类对象常量的名称。
1.4使用enum关键字定义的枚举类实现接口的情况
- 情况一:实现接口,在enum类中实现抽象方法
- 情况二:让枚举类的对象分别实现接口中的抽象方法
2.注解(Annotation)的使用
2.1概述
- 从JDK5.0开始,java增加了对元数据的支持,也就是注解;
- Annotation其实就是代码里的特殊标记,这些标记可以在编译,类加载i,运行时被读取,并执行相应的处理;
- Annotation可以像修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,参数,局部变量的声明,这些信息被保存在Annotation的”name=value“中;
- 注解是一种趋势,在一定程度上可以说:框架=注解+反射+设计模式
2.2 常见的Annotation示例
使用Annotation时要在其前面增加@符号,并把该Annotation当成一个修饰符使用。用来修饰它支持的程序元素。
-
示例一:生成文档相关的注解
- @author
- @version
- @see
- @param
- ……
-
示例二:在编译时进行格式检查JDK内置的三个基本注解
- @Override:限定重写父类方法,该注解只能用于方法;
- @Deprecated:用于表示所修饰的元素(类,方法等)已过时,通常是因为所修饰的结构危险或者存在更好的选择;
- @SuppressWarnings:抑制编译器警告
-
示例三:跟踪代码依赖性,实现替代配置文件功能
- @Servlet提供了注解,使得不再需要在web.xml文件中进行Servlet的部署
- spring框架中关于”事务“的管理
2.3 jdk中四个基本元注解
-
JDK中的元Annotation用于修饰其他Annotation的定义,也就是对现有注解进行解释说明;
-
JDK5.0中提供了4个标准的meta-annotation类型,分别是:
-
Retention:指定所修饰的Annotation的生命周期:SOURCE\CLASS(默认行为)\RUNTIME
只有声明为RUNTIME生命周期的注解,才能通过反射获取
-
Target:用于指定被修饰的Annotation能用于修饰哪些程序元素
-
Documented:表示所修饰的注解在被javadoc解析时,保留下来
-
Inherited:被它修饰的Annotation将具有继承性
-
2.4 jdk8.0中注解的新特性
- 可重复注解
- 类型注解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!