Java入门 - 06 枚举类与注释
枚举类与注释
前言
本文为B站Java教学视频BV1Kb411W75N的相关笔记,主要用于个人记录与分享,如有错误欢迎留言指出。
本章笔记涵盖视频内容P495~P515
1. 枚举类
- 定义:类只有有限个,确定的对象,称此类为枚举类;当需要定义一组常量时,强烈建议使用枚举类;如果枚举类中只有一个对象,则可以作为单例模式的实现方式。
1.1 自定义枚举类
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
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("冬天","寒冷");
}
/*
在main方法中调用时,直接使用静态方法调用即可
例:Season spring = Season.SPRING;
这样的设置方式可读性较高,而且易于查看一共有几种类型
*/
1.2 enum关键字定义枚举类
enum Season1{
//1.提供当前枚举类的对象;多个对象之间用","隔开,末尾对象用";"结束
SPRING("春天","温暖"),
SUMMER("夏天","炎热"),
AUTUMN("秋天","凉爽"),
WINTER("冬天","寒冷");
//2.声明Season1对象的属性:private final修饰
private final String seasonName;
private final String seasonDesc;
//3.私有化类的构造器,并给对象属性赋值
private Season1(String seasonName, String seasonDesc){
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
}
/*
调用方法和自定义枚举类相似Season1 summer = Season1.SUMMER
但是注意要重写toString方法,否则只会输出对象名(SUMMER),而不会输出内内部元素
*/
//额外举例:enum类的极简用法
enum Season3{
SPRING,SUMMER,AUTUMN,WINTER;
}
/*
这样定义出来的对象没有属性,但是定义和使用都非常方便
*/
- 常用方法
- values():返回一个枚举类型的对象数组,可以很方便的遍历所有的枚举值
- valueOf(String str):返回枚举类中对象名时objName的对象,若没有,则抛异常
- toString():返回当前枚举类对象常量的名称
- 使用enum关键字定义的枚举类实现接口
interface Info{
void show();
}
enum Season1 implements Info{
//这样子实现接口,能够让每种枚举类在调用show()的时候都具有不同的效果
//当然,在外部实现接口也可以,这样调用show()的时候就只会有一种效果
SPRING("春天","温暖"){
public void show(){
//......
}
},
SUMMER("夏天","炎热"){
public void show(){
//......
}
},
AUTUMN("秋天","凉爽"){
public void show(){
//......
}
},
WINTER("冬天","寒冷"){
public void show(){
//......
}
};
private final String seasonName;
private final String seasonDesc;
private Season1(String seasonName, String seasonDesc){
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
}
2. 注解
-
定义:注解其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用注解,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。开发工具可以通过这些补充进行验证或部署。
-
注解的应用场景
- 生成文档相关的注解
- 在编译时进行格式检查:
- @Override:限定重写父类方法(若未重写则报错)
- @Deprecated:用于表示所修饰的元素(类,方法等)已经过时
- @SuppressWarnings:抑制编译器警告
- 跟踪代码依赖性,实现替代配置文件功能
-
注解在目前没有太大的作用,以后在JavaEE之类的开发中才会用到,目前了解即可
2.1 自定义注解(参考@SuppressWarnings定义)
- 注解声明为:@interface
- 内部定义成员,通常使用value表示
- 可以指定成员的默认值,使用default定义
- 如果自定义注解有成员,需要指明成员的值
- 如果自定义注解没有成员,表明该注解是一个标识作用
- 自定义注解必须配上注解的信息处理流程(使用反射)才有意义
- 自定义注解通常都会指明两个元注解:Retention,target
public @interface MyAnnotation{
String value;
}
2.2 元注解
-
定义:对现有的注释进行解释说明的注解
-
jdk提供的四种元注解:
-
Retention:指定所修饰的Annotation的生命周期:SOURCE/CLASS(默认)/RUNTIME
只有声明为RUNTIME生命周期的注解,才能通过反射获取
-
Target:用于指定,被修饰的Annotation能用于修饰哪些程序元素
-
Documented:表示所修饰的注解在被javadoc解析时保留下来
- 定义为Documented的注解必须设置Retention值为RUNTIME
-
Inherited:被它修饰的Annotation将具有继承性
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)