java学习笔记 - 第11章:枚举和注解

总内容

在这里插入图片描述

引申:自动生成作者和版本

在这里插入图片描述

枚举

引出枚举

  1. 传统方式会出现问题
    属性 + 构造器 + get、set方法 + 在main方法中实例化
    在这里插入图片描述
    在这里插入图片描述
  2. 分析问题
    在这里插入图片描述
  3. 解决问题
    在这里插入图片描述

枚举两种实现方式

在这里插入图片描述

第一种:自定义枚举类

步骤

在这里插入图片描述

细节及代码

在这里插入图片描述

小结

在这里插入图片描述

第二种:enum枚举类

步骤

在这里插入图片描述

细节1

javap 反编译
在这里插入图片描述
反编译发现继承了Enum类
在这里插入图片描述

在这里插入图片描述

细节2

在这里插入图片描述

用enum实现枚举的代码

/**
 * @author 王胖子
 * @version 1.0
 */
public class Excise {
    public static void main(String[] args) {
        System.out.println(Season.SPRING);
    }
}
enum Season{
    //; 只写分号表示枚举类为空
    SPRING("春天","温暖"),WINTER("冬天","寒冷"),
    SUMMER("夏天","炎热"),AUTUMN("秋天","凉爽");
    private String name;
    private String desc;//描述

    Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}

一个小练习

在这里插入图片描述

Enum成员方法

5.1 常用方法

5.2 讲解常用的方法
在这里插入图片描述
5.3 代码演示

补充增强for循环和普通for循环的对比(在代码最下面演示了)

public class Excise {
    public static void main(String[] args) {
        //使用Season 枚举类,来演示各种方法
        Season autumn = Season.AUTUMN;
        //1. 输出枚举对象的名字
        System.out.println("1. autumn.name() = " + autumn.name());
        //2. ordinal()输出的是该枚举对象的次序或编号,从0开始编号
        System.out.println("1. autumn.ordinal() = " + autumn.ordinal());
        //3. 从反编译可以看出,values方法,返回的是Season[]
        //含有定义的所有枚举对象
        Season[] values = Season.values();
        System.out.println("====Season.values()返回一个枚举对象的数组====");
        System.out.println("=====遍历取出枚举对象(增强for循环)=====");
        for (Season season : values) {//增强for循环
            //执行流程是:依次从nums数组中取出数据,赋给i,如果取出完毕,则退出for
            System.out.println(season);
        }
        //4. valueOf:将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常
        //执行流程:
        //① 根据输入的"Autumn" 到 Season的枚举对象区查找
        //② 如果找到了,就返回,如果没找到,就报错
        Season autumn1 = Season.valueOf("AUTUMN");
        System.out.println("Season.valueOf(\"AUTUMN\") = " + autumn1);
        System.out.println(autumn == autumn1);//true
        //5.compareTo:比较两个枚举常量,比较的是编号
        //解读:
        //就是把Season.SPRING枚举对象的编号和Season.SUMMER枚举对象的编号比较
//        public final int compareTo(E o) {
//            Enum<?> other = (Enum<?>)o;
//            Enum<E> self = this;
//            if (self.getClass() != other.getClass() && // optimization
//                    self.getDeclaringClass() != other.getDeclaringClass())
//                throw new ClassCastException();
//            return self.ordinal - other.ordinal;
//        }
        System.out.println("Season.SPRING.compareTo(Season.SUMMER) = " +
                Season.SPRING.compareTo(Season.SUMMER));//返回的是int -> -3
//        补充增强for循环和普通for循环的对比
//        for (Season season:values) {
//            System.out.println(season);
//        }
//        for (int i = 0; i < values.length; i++) {//传统for循环
//            System.out.println(values[i]);
//        }
    }
}

enum Season {
    //; 只写分号表示枚举类为空
    SPRING("春天", "温暖"), WINTER("冬天", "寒冷"),
    SUMMER("夏天", "炎热"), AUTUMN("秋天", "凉爽");
    private String name;
    private String desc;//描述

    Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}

输出
在这里插入图片描述

JDK内置的基本注解类型

注解的理解

在这里插入图片描述

三个基本的Anotation

在这里插入图片描述

@Override重写父类方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

@Deprecated某元素已过时

在这里插入图片描述
在这里插入图片描述

@SuppressWarnings抑制编译器警告

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

元注解(了解即可)

  1. 基本介绍
    在这里插入图片描述
  2. @Retention(注解可以保留多久)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. @Target(能用于修饰哪些程序元素)
    在这里插入图片描述
  4. @Documented(生成文档时,可以看到该类的注释)
    在这里插入图片描述
  5. @Inherited(子类自动具有该注解)
    在这里插入图片描述

本章作业(枚举类)

在这里插入图片描述

枚举值的 switch使用在这里插入图片描述

  1. switch的 () 中放入枚举对象
    switch (yellow)
  2. 在每个case后,直接写上在枚举类中定义的枚举对象即可
    case Black:

枚举类中放着枚举类的对象
Color yellow = Color.Yellow;//引用枚举类对象
yellow.show();//枚举类对象调用枚举类中的方法

/**
 * @author 王胖子
 * @version 1.0
 */
public class Excise {
    public static void main(String[] args) {
        //Yellow是枚举类中的对象
        Color yellow = Color.Yellow;
        yellow.show();

        //演示枚举值的 switch使用
        //switch的 () 中,方法枚举对象
        //在每个case后,直接写上在枚举类中定义的枚举对象即可
        switch (yellow) {
            case Black:
                System.out.println("匹配到黑色");
                break;
            case Yellow:
                System.out.println("匹配到黄色");
                break;
            default:
                System.out.println("未匹配到");
                break;
        }
    }
}

//接口
interface ShowColor {
    public void show();
}

//枚举类
enum Color implements ShowColor {
    //这些是枚举类中的对象
    Red(255, 0, 0), Blue(0, 0, 255),
    Yellow(255, 255, 0), Black(0, 0, 0),
    Green(0, 255, 0);
    private int redValue;
    private int greenValue;
    private int blueValue;

    Color(int redValue, int greenValue, int blueValue) {
        this.redValue = redValue;
        this.greenValue = greenValue;
        this.blueValue = blueValue;
    }

    @Override
    public void show() {
        System.out.println("redValue = " + redValue + "\ngreenValue = " +
                greenValue + "\nblueValue = " + blueValue);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值