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将具有继承性

posted @   Solitary-Rhyme  阅读(71)  评论(0编辑  收藏  举报
编辑推荐:
· 基于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)
点击右上角即可分享
微信分享提示