Java枚举类与注解基础知识学习笔记

 B站视频指路:尚硅谷Java入门视频教程(在线答疑+Java面试真题)_哔哩哔哩_bilibili

写在前面:马上秋招,打算从0开始再学一遍Java,开个知识点记录贴,就当做课堂笔记吧.

希望秋招顺利.

枚举类的使用
        ·如何自定义枚举类
        ·如何使用关键字enum定义枚举类
        ·Enum类的主要方法
        ·实现接口的枚举类
tips:
        1.枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类
        2.当需要定义一组常量时.强烈建议使用枚举类
        3.如果枚举类中只有一个对象,可以使用单例模式的实现方式

枚举类的属性:
        1.枚举类对象的属性不应允许被改动,所以应该使用private final修饰
        2.枚举类使用private final修饰的属性应该在构造器中为其赋值
        3.若枚举类显式的定义了带参数的构造器,则在列举出枚举值时也必须对应的传入参数

如何定义枚举类:
        方式一:jdk5.0之前,自定义枚举类(略 现在不用)
        方式二:jdk5.0,可以使用enum关键字定义枚举类
使用Enum关键字:定义的枚举类默认继承于java.lang.enum

import org.junit.Test;

public class enumTest {
    @Test
    public void test(){
        Season summer = Season.Summer;
        System.out.println(summer);
        System.out.println(Season.class.getSuperclass());
    }
}
//使用enum关键字
    //定义的枚举类默认的继承于java.lang.Enum
enum Season{
    //1.提供当前枚举类的对象,多个对象之间用","隔开,末尾对象";"结束
    Spring("春天","春暖花开"),
    Summer("夏天","热的一笔"),
    Autumn("秋天","还是很热"),
    Winter("冬天","冷一个月");

    //2.声明Season对象的属性,private final修饰
   private final String name;
   private final String sytle;

    //3.私有化类的构造器,并给对象赋值
   private Season(String name, String sytle) {
        this.name = name;
        this.sytle = sytle;
    }
    //4.其它诉求:获取枚举类对象的属性

    public String getName() {
        return name;
    }

    public String getSytle() {
        return sytle;
    }
}


 Enum类的主要方法:Java枚举类与注解基础知识学习笔记_第1张图片

常用到的:
        ·values()方法:返回枚举类型的对象数组,该方法可以很方便的遍历所有的枚举值
        ·valueOf(String str):可以把一个字符串转为对应的枚举类对象.要求字符串必须是枚举类对象的"名字",若不是会有运行时的异常
        ·toString():返回当前枚举类对象常量的名称

import org.junit.Test;

public class enumTest {
    @Test
    public void test(){
        Season summer = Season.Summer;
        //values()
        Season[] seasons = Season.values();
        for (int i = 0; i < seasons.length; i++) {
            System.out.println(seasons[i]);
        }
        System.out.println("***********************************");
        //valueOf(String objName):返回枚举类中对象名是objName的对象
        //若没有objName的枚举类对象,则抛异常
        Season winter = Season.valueOf("Winter");
        System.out.println(winter);
        //toString():返回当前枚举类对象常量的名称

    }
}
//使用enum关键字
    //定义的枚举类默认的继承于java.lang.Enum
enum Season{
    //1.提供当前枚举类的对象,多个对象之间用","隔开,末尾对象";"结束
    Spring("春天","春暖花开"),
    Summer("夏天","热的一笔"),
    Autumn("秋天","还是很热"),
    Winter("冬天","冷一个月");

    //2.声明Season对象的属性,private final修饰
   private final String name;
   private final String sytle;

    //3.私有化类的构造器,并给对象赋值
   private Season(String name, String sytle) {
        this.name = name;
        this.sytle = sytle;
    }
    //4.其它诉求:获取枚举类对象的属性

    public String getName() {
        return name;
    }

    public String getSytle() {
        return sytle;
    }
}

使用enum关键字定义的枚举类实现接口的情况
        1.实现接口,在enum类中实现抽象方法(和普通类实现接口完全一样的写法)
        2.让枚举类的对象分别实现接口中的抽象方法

import org.junit.Test;

public class enumTest {
    @Test
    public void test(){
        Season summer = Season.Summer;
        //values()
        Season[] seasons = Season.values();
        for (int i = 0; i < seasons.length; i++) {
           seasons[i].show();
        }
        System.out.println("***********************************");
        //valueOf(String objName):返回枚举类中对象名是objName的对象
        //若没有objName的枚举类对象,则抛异常
        Season winter = Season.valueOf("Winter");
        System.out.println(winter);
        //toString():返回当前枚举类对象常量的名称

    }
}
interface info{
    void show();
}
//使用enum关键字
    //定义的枚举类默认的继承于java.lang.Enum
enum Season implements info{
    //1.提供当前枚举类的对象,多个对象之间用","隔开,末尾对象";"结束
    Spring("春天","春暖花开"){
        @Override
        public void show() {
            System.out.println("chuntian");
        }
    },
    Summer("夏天","热的一笔"){
        @Override
        public void show() {
            System.out.println("xiatian");
        }
    },
    Autumn("秋天","还是很热"){
        @Override
        public void show() {
            System.out.println("qiutian");
        }
    },
    Winter("冬天","冷一个月"){
        @Override
        public void show() {
            System.out.println("dongtian");
        }
    };

    //2.声明Season对象的属性,private final修饰
   private final String name;
   private final String sytle;

    //3.私有化类的构造器,并给对象赋值
   private Season(String name, String sytle) {
        this.name = name;
        this.sytle = sytle;
    }
    //4.其它诉求:获取枚举类对象的属性

    public String getName() {
        return name;
    }

    public String getSytle() {
        return sytle;
    }
}

注解(Annotation)

        ·JDK5.0开始,Java增加了对元数据(MetaData)的支持,也就是Annotation
        ·Annotation其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理.通过使用Annotation,程序员可以在不改变其原有逻辑的情况下,载源文件中嵌入一些补充信息.代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署
        ·Annotation可以像修饰符一样被使用,可以用于修饰包、类、构造器、方法、成员变量、参数、局部变量声明,这些信息被保存在Annotation的"name=value"对中
        ·一定程度上可以说:框架=注解+反射+设计模式
        ·在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等.在JavaEE/Android中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE旧版所遗留的繁冗代码和XML配置等

示例:
        使用Annotation时要在其前面加@符号,并把该Annotion当成一个修饰符使用,用于修饰它支持的程序元素
        1.生成文档相关的注解:
Java枚举类与注解基础知识学习笔记_第2张图片
        2.在编译时进行格式检查(JDK内置的三个基本注解)Java枚举类与注解基础知识学习笔记_第3张图片
        3.跟踪代码依赖性,实现替代配置文件功能
                Servlet3.0提供了注解(annotation),使得不需要在web.xml文件中进行Servlet的部署
Java枚举类与注解基础知识学习笔记_第4张图片
                spring框架中关于"事务"的管理Java枚举类与注解基础知识学习笔记_第5张图片
        
如何自定义注解:参照@SuppressWarnings定义
        ·注解声明为:@interface
        ·自定义注解自动继承了java.lang.annotation.Annotation接口
        ·Annotation的成员变量在Annotation定义中以无参数方法的形式来声明.其方法名和返回值定义了该成员的名字和类型,我们成为配置参数,类型只能是八种基本数据类型、String类型、Class类型、enum类型、Annotation类型以上所有类型的数组
        ·可以在定义Annotation的成员变量时为其指定初始值,指定成员变量的初始值可以使用default关键字
        ·若只有一个参数成员,建议使用参数名为:value
        ·若定义的注解含有配置参数,那么使用时必须指定参数值,除非它有默认值.格式为"参数名=参数值",若只有一个参数成员,且名字为value,可以省略"value="
        ·没有成员定义的Annotation称为标记,包含成员变量的Annotation称为元数据Annotation
tips:自定义注解必须配上注解的信息处理流程(使用反射)才有意义
        ·自定义注解通常都会指明两个元注解:Retention、Target

public @interface zk {
    String value();
}

 JDK中提供的4个基本的元注解
        ·元注解:对现有注解进行解释说明的注解
        ·JDK的元Annotation用于修饰其他Annotation定义
        ·JDK5.0提供了4个标准的meta-annotation类型,分别是:
                1.Retention
                2.Target
                3.Documented
                4.Inherited


1.Retention
Java枚举类与注解基础知识学习笔记_第6张图片
Java枚举类与注解基础知识学习笔记_第7张图片
  2.Target

Java枚举类与注解基础知识学习笔记_第8张图片

3.Documented  4.Inherited        //出现频率低 使用较少Java枚举类与注解基础知识学习笔记_第9张图片

 通过反射获得注解信息(后面讲到反射再讲)

jdk 8 中注解的新特性:可重复注解、类型注解
        ·可重复注解
                1.在MyAnnotation上声明@Repratable,成员值为MyAnnotation.class,
                2.MyAnnotation的Target、Retention等元注解和MyAnnotation相同

Java枚举类与注解基础知识学习笔记_第10张图片
Java枚举类与注解基础知识学习笔记_第11张图片

        

         ·类型注解              
Java枚举类与注解基础知识学习笔记_第12张图片

Java枚举类与注解基础知识学习笔记_第13张图片

你可能感兴趣的:(Java基础知识,java,学习,开发语言)