zoukankan      html  css  js  c++  java
  • 枚举&注解

    枚举:自定义枚举类

                使用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
  • 相关阅读:
    PAT 1088. Rational Arithmetic
    PAT 1087. All Roads Lead to Rome
    PAT 1086. Tree Traversals Again
    PAT 1085. Perfect Sequence
    PAT 1084. Broken Keyboard
    PAT 1083. List Grades
    PAT 1082. Read Number in Chinese
    求最大公因数
    [转载]Latex文件转成pdf后的字体嵌入问题的解决
    [转载]Matlab有用的小工具小技巧
  • 原文地址:https://www.cnblogs.com/afangfang/p/12594551.html
Copyright © 2011-2022 走看看