• 枚举&注解


    枚举:自定义枚举类

                使用Enum关键字定义的枚举类 

    注解:jdk内置的基本注解类型(3个) 

               自定义注解类型

               对注解进行注解(元注解4个)

              利用反射获取注解信息(反射部分涉及)

    自定义枚举类:

    TestSeason 
    package com.aff.Gen;
    //自定义的枚举类
    public class TestSeason {
        public static void main(String[] args) {
            Season spring = Season.SPRING;
            System.out.println(spring);
            spring.show();
            System.out.println(spring.getSeasonName());
        }
    }
    
    // 枚举类
    class Season {
        // 1. 提供类的属性,声明private final
        private final String seasonName;
        private final String seasonDesc;
    
        // 2.声明为final的属性,在构造器中初始化
        public Season(String seasonName, String seasonDesc) {
            super();
            this.seasonName = seasonName;
            this.seasonDesc = seasonDesc;
        }
    
        // 3.通过公共的方法来调用属性
        public String getSeasonName() {
            return seasonName;
        }
    
        public String getSeasonDesc() {
            return seasonDesc;
        }
    
        // 4.创建枚举类的对象 president
        public static final Season SPRING = new Season("spring", "春暖花开");
        public static final Season SUMMER = new Season("Summer", "夏日炎炎");
        public static final Season AUTUMN = new Season("Autumn", "秋高气爽");
        public static final Season WINTER = new Season("Winter", "白雪皑皑");
    
        @Override
        public String toString() {
            return "Season [seasonName=" + seasonName + ", seasonDesc=" + seasonDesc + "]";
        }
    
        public void show() {
            System.out.println("这是一个季节");
        }
    }

    使用Enum关键字定义的枚举类:

    TestSeasonEnum

    package com.aff.Gen;
    
    //使用Enum关键字定义的枚举类
    /*      常用的方法: values()  :以数组的形式返回整个枚举类的对象。
                                  valuesOf(String name) : 传入字符串,返回枚举类的对象 
            如何让枚举类实现接口: 可以让不同枚举类的对象调用被重写的抽象方法,执行的效果不同
                               相当于让每一个对象从重写抽象方法;
    */
    public class TestSeasonEnum {
        public static void main(String[] args) {
            Season1 spring = Season1.SPRING;
            System.out.println(spring);//Season1 [seasonName=spring, seasonDesc=春暖花开]
            spring.show();//c春天在那
            System.out.println(spring.getSeasonName());//spring
            
            //values()
            Season1[]  season =  Season1.values();
            for(int i = 0;i<season.length;i++){
                    System.out.println(season[i]);            
            }
            
            //valuesOf(String  name); 要求传入的形参name是枚举类的对象的名字
            //否则,报 java.lang.IllegalArgumentException
            String str = "SPRING";
            Season1 s = Season1.valueOf(str);
            System.out.println(s);//Season1 [seasonName=spring, seasonDesc=春暖花开]
            s.show();//c春天在那
        
        //枚举类:线程的state 
        Thread.State[] state  =      Thread.State.values();
        for(int  i = 0;i<state.length;i++){
            System.out.println(state[i]);
            }
        }
    }
    interface Info{
        void show();
    }
    
    // 枚举类
    enum Season1  implements Info{
        SPRING ("spring", "春暖花开"){
            public void show() {
                System.out.println("c春天在那");
            }
        },
        SUMMER ("Summer", "夏日炎炎"){
            public void show() {
                System.out.println("这是一个夏节");
            }
        },
        AUTUMN ("Autumn", "秋高气爽"){
            public void show() {
                System.out.println("这是一个秋节");
            }
        },
        WINTER ("Winter", "白雪皑皑"){
            public void show() {
                System.out.println("这是一个冬节");
            }
        };
        
        private final String seasonName;
        private final String seasonDesc;
    
        private Season1(String seasonName, String seasonDesc) {
            this.seasonName = seasonName;
            this.seasonDesc = seasonDesc;
        }
    
        public String getSeasonName() {
            return seasonName;
        }
    
        public String getSeasonDesc() {
            return seasonDesc;
        }
    
        @Override
        public String toString() {
            return "Season1 [seasonName=" + seasonName + ", seasonDesc=" + seasonDesc + "]";
        }
    
    /*    public void show() {
            System.out.println("这是一个季节");
        }*/
    }

    注解:

    package com.aff.Gen;
    import java.util.ArrayList;
    import java.util.List;
    /*
    注解
       1.jdk提供的常用的注解
            @Override:限定重写父类方法,该注释只能用于方法
            @Deprecated:用于表示某个程序 (类,方法等) 已过时
            @SuppressWarnings:抑制编译器警告
       2.如何自定义一个注解
       3.元注解
            1>@Retention:
                   |----只能用于修饰一个 Annotation 定义, 用于指定该 Annotation 可以保留多长时间, 
                        @Rentention 包含一个 RetentionPolicy 类型的成员变量
                        使用 @Rentention 时必须为该 value 成员变量指定值:
                                   |---- RetentionPolicy.SOURCE: 编译器直接丢弃这种策略的注释
                                   |---- RetentionPolicy.CLASS: 编译器将把注释记录在 class 文件中. 
                                         当运行 Java 程序时, JVM 不会保留注解。 这是默认值
                                   |---- RetentionPolicy.RUNTIME:编译器将把注释记录在 class 文件中.
                                         当运行 Java 程序时, JVM 会保留注释. 程序可以通过反射获取该注释
            2>@Target
                   |---- 用于修饰 Annotation 定义, 用于指定被修饰的 Annotation 能用于修饰哪些程序元素. 
                         @Target 也包含一个名为 value 的成员变量.
            3>@Documented
                   |---- 用于指定被该元 Annotation 修饰的 Annotation 类将被 javadoc 工具提取成文档.
                         定义为Documented的注解必须设置Retention值为RUNTIME。
    
            4>@Inherited
                   |---- 被它修饰的 Annotation 将具有继承性.
    如果某个类使用了被 @Inherited 修饰的 Annotation, 则其子类将自动具有该注解 实际应用中,使用较少
    */ public class TestAnnotation { public static void main(String[] args) { Person p = new Student(); p.walk(); @SuppressWarnings({ "rawtypes", "unused" }) List list = new ArrayList(); } } @MyAnnotation("afangfang") class Student extends Person { @Override public void walk() { System.out.println("学生走轮"); } @Override public void eat() { System.out.println("学生吃饭"); } } @Deprecated class Person { String name; int age; public Person() { super(); } public Person(String name, int age) { this.name = name; this.age = age; } public void walk() { System.out.println("走轮"); } public void eat() { System.out.println("吃饭"); } }

    自定义注解:

    MyAnnotation

    package com.aff.Gen;
    
    //自定义的注解
    public @interface MyAnnotation {
        String value() default "hello";
    
    }
    All that work will definitely pay off
  • 相关阅读:
    html标签嵌套规则
    关于setTimeout和Promise执行顺序问题
    vue基础
    new操作符具体干了什么
    ["1", "2", "3"].map(parseInt)
    线性表
    树的一些概念和性质
    A*与IDA*
    树上启发式合并
    启发式合并
  • 原文地址:https://www.cnblogs.com/afangfang/p/12594551.html
Copyright © 2020-2023  润新知