枚举、注解

  • 枚举:每一个枚举项都是枚举类的对象
  • 枚举类.枚举项 使用枚举对象
  • 枚举项必须写在类中第一行,不包括空格
  • 枚举类中可以定义成员变量、和构造方法 也可定义抽象方法,但必须重写枚举项
public class Test01 {
    public static void main(String[] args) {
        // SPRING SUMMER AUTUMN WINTER
        // 枚举方法
        // 枚举类名.枚举对象获取枚举对象,name()方法获取枚举项名称
        String name = Season.SUMMER.name();
        System.out.println(name);

        //ordinal()方法获取枚举类中枚举项索引
        int ordinal = Season.SPRING.ordinal();
        System.out.println(ordinal);

        /// compareTo比较两个枚举项,并返回它们之间索引差
        int i = Season.AUTUMN.compareTo(Season.SPRING);
        System.out.println(i);

        //toString()方法返回枚举项的名称
        String s = Season.AUTUMN.toString();
        System.out.println(s);


        // valueOf方法获取某个类中某个枚举项
        Season autumn = Enum.valueOf(Season.class, "AUTUMN");
        System.out.println(autumn);

        //values() 静态方法获取枚举类中所有枚举项
        Season[] values = Season.values();
        for (Season value : values) {
            System.out.println(value);
        }
    }
}
public enum Season {
    //定义一个枚举类
    //每一个枚举项都是枚举类的对象
    SPRING("春", 3) {
        @Override
        public void method() {
            System.out.println((this.name)+"年龄是"+(this.age));
        }
    }, SUMMER("夏", 6) {
        @Override
        public void method() {
            System.out.println((this.name)+"年龄是"+(this.age));
        }
    }, AUTUMN("秋", 10) {
        @Override
        public void method() {
            System.out.println((this.name)+"年龄是"+(this.age));
        }
    }, WINTER("冬", 1) {
        @Override
        public void method() {
            System.out.println((this.name)+"年龄是"+(this.age));
        }
    };

    //定义成员变量
   public String name;
    public int age;

    //定义空参构造
    private Season() {
    }

    ;

    //定义有参构造
    private Season(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //定义抽象方法,枚举项对象方法必须重写
    public abstract void method();
}
  • 注解:即是对程序进行解释和标签(本意简化代码)
public @interface Anno1 {

    //自定义注解格式   public 数据类型 属性名 () default 默认值;
    //定义基本类型
    public int i () default 1;

    //定义String类型
    public String Stu () default "张";

    //定义class字节码类型
    public Class cla () default Anno2.class;

    //定义枚举型
    public Season sea () default Season.SUMMER;

    //定义注解型
    public Anno2 ANNO () default @Anno2;

    //测试value 特殊赋值
    public String value () ;
}
public @interface Anno2 {
    //定义测试注解
}
//如果定义注解某些属性没有赋值,需在使用注解时小括号手动赋值,多个值用逗号隔开
//@Anno1(i=1, Stu="张")
//如果只有一个属性名 value没有赋值,再使用时可以省略value,直接赋值
@Anno1("lihua")
public class AnnoDemo {
}

  • 自定义注解基本使用
public class Demo1 {

    //定义一个类,运行Test注解的方法
    public void method1(){
        System.out.println("方法一");
    }
    @Test
    public void method2(){
        System.out.println("方法二");
    }
    @Test
    public void method3(){
        System.out.println("方法三");
    }
}
@Retention(value= RetentionPolicy.RUNTIME)
public @interface Test {
    //定义一个注解
}


public class TestDemo1 {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException {
        //主方法演示,想操作某个类自然要先获得这个类的对象

        //获取class对象
        Class<?> aClass = Class.forName("com.songzhang.packag1.annotation.Demo1");

        //创建空参对象
        Demo1 de = (Demo1) aClass.newInstance();

        //获取方法
        Method[] declaredMethods = aClass.getDeclaredMethods();
        //遍历获取每一个方法
        for (Method declaredMethod : declaredMethods) {
            //调用isAnnotationPresent方法传入注解.class 判断是否有此注解,返回值为Boolean类型
            if (declaredMethod.isAnnotationPresent(Test.class)){
                declaredMethod.invoke(de);
            }
        }
    }
}


  • 元注解:即jdk提供的注解,描述注解的注解

//表示注解可以存在的位置,依次表示成员变量,类,成员方法
@Target({ElementType.FIELD,ElementType.TYPE,ElementType.METHOD})
//表示注解的生命周期
@Retention(RetentionPolicy.RUNTIME)
//表示自定义注解可以被子类继承
@Inherited
public @interface Anno3 {
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值