文章目录

  • 枚举类的使用
  • 注解的使用
  • 总结


枚举类的使用

一、枚举类的使用
1.枚举类的理解:类的对象只有有限个,确定的。我们称此类为枚举类
2.当需要定义一组常量时,强烈建议使用枚举类
3.如果枚举类中只有一个对象,则可以作为单例模式的实现方式。

二、如何定义枚举类
方式一:jdk5.0之前,自定义枚举类
方式二:jdk5.0,可以使用enum关键字定义枚举类

三、Enum类中的常用方法:
values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。
valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常 IllegalArgumentException。
toString():返回当前枚举类对象常量的名称

四、使用enum关键字定义的枚举类实现接口的情况
情况一:实现接口,在enum类中实现抽象方法
情况二:让枚举类的对象分别实现接口中的抽象方法

//自定义枚举类方式一
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("冬天","冰天雪地");

    //4.其他诉求1:获取枚举类对象的属性
    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }
    //4.其他诉求1:提供toString()
    @Override
    public String toString() {
        return "Season{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
}
//方式二用enum 并实现接口的情况二
interface Info{
        void show();
    }
    //使用enum关键字枚举类
    enum Season1 implements Info {
        //1.提供当前枚举类的对象,多个对象之间用","隔开,末尾对象";"结束
        SPRING("春天","春暖花开"){
            @Override
            public void show() {
                System.out.println("春天在哪里?");
            }
        },
        SUMMER("夏天","夏日炎炎"){
            @Override
            public void show() {
                System.out.println("宁夏");
            }
        },
        AUTUMN("秋天","秋高气爽"){
            @Override
            public void show() {
                System.out.println("秋天不回来");
            }
        },
        WINTER("冬天","冰天雪地"){
            @Override
            public void show() {
                System.out.println("大约在冬季");
            }
        };

        //2.声明Season对象的属性:private final修饰
        private final String seasonName;
        private final String seasonDesc;

        //2.私有化类的构造器,并给对象属性赋值

        private Season1(String seasonName,String seasonDesc){
            this.seasonName = seasonName;
            this.seasonDesc = seasonDesc;
        }

        //4.其他诉求1:获取枚举类对象的属性
        public String getSeasonName() {
            return seasonName;
        }

        public String getSeasonDesc() {
            return seasonDesc;
        }
    }

注解的使用

/**
 * 注解的使用
 *
 * 1. 理解Annotation:
 * ① jdk 5.0 新增的功能
 *
 * ② Annotation 其实就是代码里的特殊标记, 这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理。通过使用 Annotation,
 * 程序员可以在不改变原有逻辑的情况下, 在源文件中嵌入一些补充信息。
 *
 * ③在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE/Android
 * 中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗
 * 代码和XML配置等。
 *
 * 2. Annocation的使用示例
 * 示例一:生成文档相关的注解
 * 示例二:在编译时进行格式检查(JDK内置的三个基本注解)
     @Override: 限定重写父类方法, 该注解只能用于方法
     @Deprecated: 用于表示所修饰的元素(类, 方法等)已过时。通常是因为所修饰的结构危险或存在更好的选择
     @SuppressWarnings: 抑制编译器警告

  * 示例三:跟踪代码依赖性,实现替代配置文件功能
  *
  * 3. 如何自定义注解:参照@SuppressWarnings定义
      * ① 注解声明为:@interface
      * ② 内部定义成员,通常使用value表示
      * ③ 可以指定成员的默认值,使用default定义
      * ④ 如果自定义注解没有成员,表明是一个标识作用。

     如果注解有成员,在使用注解时,需要指明成员的值。
     自定义注解必须配上注解的信息处理流程(使用反射)才有意义。
     自定义注解通过都会指明两个元注解:Retention、Target

     4. jdk 提供的4种元注解
       元注解:对现有的注解进行解释说明的注解
     Retention:指定所修饰的 Annotation 的生命周期:SOURCE\CLASS(默认行为)\RUNTIME
            只有声明为RUNTIME生命周期的注解,才能通过反射获取。
     Target:用于指定被修饰的 Annotation 能用于修饰哪些程序元素
     *******出现的频率较低*******
     Documented:表示所修饰的注解在被javadoc解析时,保留下来。
     Inherited:被它修饰的 Annotation 将具有继承性。

     5.通过反射获取注解信息 ---到反射内容时系统讲解

     6. jdk 8 中注解的新特性:可重复注解、类型注解

     6.1 可重复注解:① 在MyAnnotation上声明@Repeatable,成员值为MyAnnotations.class
                    ② MyAnnotation的Target和Retention等元注解与MyAnnotations相同。

     6.2 类型注解:
     ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中(如:泛型声明)。
     ElementType.TYPE_USE 表示该注解能写在使用类型的任何语句中。

      *
 * @author shkstart
 * @create 2019 上午 11:37
 */
  1. 生成文档相关的注解
  2. 在编译时进行格式检查(JDK内置的三个基本注解) @override @Deprecated @SuppressWarnings

总结

  1. 什么是枚举类,枚举类型声明的修饰符有哪些
    枚举类:类中的对象的个数是确定的,有限个
    修饰符:public static final
  2. 什么是元注解,Retention和Target元注解的作用
    元注解:对现有注解进行解释说明的注解
    Retention:指明所修饰的注解的生命周期。(SOURCE,CLASS,RUNTIME)
  3. 集合框架有哪些接口,存储数据的特点是什么
    Collection接口:单列集合,用来存储一个一个的对象
    |----List接口:存储有序的、可重复的数据 ---->"动态"数组
    |--------ArrayList、LinkedLisk、Vector
    |----Set接口:存储无序的、不可重复的数据---->“集合”
    |--------HashSet、LinkedHashSet、TreeSet
    |----Map接口:双列组合、用来存储一对数据(key - value) ---->“函数”
    |--------HashMap、LinkedHashMap、TreeMap、Hashtable、Properties
  4. 比较throw和thorws的异同
    thorw:用于生成异常并抛出,生命在方法内部中(与自动抛出异常对象相对应)
    thorws:声明处理异常的方式,生命在方法名的末尾(与try-catch- finally相对应)
  5. 同步代码块中同步监视器和共享数据的理解以及各自要求
    同步监视器(synchronized):本质上是一个锁,任何对象都可以当作锁,但是要保证使用的是同一把锁
    共享数据:多个线程共同操作的数据,称为共享数据,需要使用同步机制将共享数据的代码包起来,不能多不能少