枚举和注解

枚举和注解

  • 枚举(enum)

    • 定义

    • Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。
      • 使用enum定义枚举类
        • JDK 1.5新增的enum关键字用于定义枚举类
        • 枚举类和普通类的区别:
          • 使用enum定义枚举类默认继承了java.util.Enum类
          • 枚举类的构造器只能使用private访问控制符
          • 枚举类的所有实例必须在枚举类中显式列出(,分隔 :结尾)列出的实例系统会自动添加public static final 修饰
          • 所有的枚举类都提供了一个values方法,该方法可以方便遍历所有的枚举值.
      • JDK 1.5中可以在switch表达式中使用枚举类的对象作为表达式,case子句可以直接使用枚举值的名字,无需添加枚举类作为限定
      • 若枚举只有一个成员,则可以作为一种单例模式的实现方式
    • 自实现枚举类
    • 使用enum定义枚举类
    • 实现接口的枚举类
      • 和普通Java类一样枚举类可以实现一个或多个接口
      • 若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式,则可以让每个枚举值分别来实现该方法
    • 枚举类的方法
public class EnumDemo {
    public static void main(String[] args) {
        //Sesson.AUTUMN;这段执行就是获取一个Sesson的对象
        Sesson sesson= Sesson.AUTUMN;
        sesson.colorInfo();
        Sesson sesson1= Sesson.AUTUMN;
        //每次执行Sesson.AUTUMN获取是相同的对象,枚举类中的每个枚举都是单例模式的
        System.out.println(sesson1==sesson);
        System.out.println(sesson1.equals(sesson));

        //调用枚举类实现的接口方法
        sesson.test();

        // 调用 values()  返回枚举类中所有的值。
        Color[] arr = Color.values();

        // 迭代枚举
        for (Color col : arr)
        {
            // 查看索引 ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。
            System.out.println(col + " at index " + col.ordinal());
            //RED at index 0
            //GREEN at index 1
            //BLUE at index 2
        }

        // 使用 valueOf() 返回枚举常量,不存在的会报错 IllegalArgumentException
        System.out.println(Color.valueOf("RED"));
        // System.out.println(Color.valueOf("WHITE"));
    }
}

enum Color
{
    RED, GREEN, BLUE;
}

enum Sesson implements Iteat{
    //此处相当于在调用有参的构造函数
    SPRING("春天","春暖花开"),
    SUMMER("夏天","炎炎夏日"),
    AUTUMN("秋天","秋高气爽"),
    WINTER("冬天","寒风凛冽");

    private final String name;
    private final String desc;

      Sesson(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public  void colorInfo(){
        System.out.println(this.name + ":"+this.desc);
    }

    @Override
    public void test() {
        System.out.println("枚举实现了接口的方法");
    }
}

interface Iteat{
    void test();
}
  • 注解(Annotation)概述

    • 从JDK 5.0开始,Java增加了对元数据(MetaData)的支持,也就是Annotation(注释)

    • Annotation确实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理.通过使用Annotation,程序员可以在不改变原来逻辑的情况下,在源文件中嵌入一些补充信息

    • Annotation可以像修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,参数,局部变量的声明,这些信息被保存在Annotation的"name=value"对中.

    • Annotation能被用来为程序元素(类,方法,成员变量等)设置元数据

    • 基本的Annotation

      • 使用Annotation时要在其前面增加@符号,并把该Annotation当成一个修饰符使用,用于修饰它支持的程序元素
      • 三个基本的Annotation:
        • @Override:限定重写父类方法,该注释只能用于方法
        • @Deprecated:用于表示某个程序元素(类,方法等)已过时
        • @SuppressWarnings:抑制编译器警告.
    • 自定义 Annotation

      • 定义新的Annotation类型使用@interface关键字
      • Annotation的成员变量在Annotation定义中以无参数方法的形式来声明,其方法名和返回值定义了该成员的名字和类型
      • 可以在定义Annotation的成员变量时为其指定初始值,指定成员变量的初始值可使用default关键字
      • 没有成员定义的Annotation称为标记;包含成员变量的Annotation称为元数据Annotation
import java.lang.annotation.*;

public class OverrideDemo {
    public static void main(String[] args) {
        Test1 test1 = new Test1();
        System.out.println(test1.name);
    }
}
class Test1{
    @Test(id = 1,desc = "姓名")
    String name;
}


@Target(ElementType.FIELD)//这个注解类是给其他类的属性做注解
@Retention(RetentionPolicy.RUNTIME)//定义注解的声明周期
@Documented//注解文档放到document
@interface Test{
    public int id() default 0;

    public String desc() default "";
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值