二十、枚举、注解

1 枚举

当需要定义一组常量来表示具有相同类型的有穷对象时,此时就可以使用枚举

枚举:一种特殊的类

定义格式:public enum 类名 { }

可列举的多个对象,之间使用逗号分隔,结尾用分号。

定义对象所有的属性,属性尽量定义为final;

private 带参构造 :属性的getter方法 { }

枚举类的实现:

  • JDK1.5 之前需要自定义枚举类
  • JDK1.5 新增的 enum 关键字用于定义枚举类

1.1 自定义枚举类

用类模拟枚举定义

  • 私有化类的构造器,保证不能在类的外部创建其对象
  • 在类的内部创建枚举类的实例,声明为:public static final
public class Season {
    private final String NAME;  //季节名称
    private final String DESC;  //季节描述

    public Season(String name, String desc) {
        NAME = name;
        DESC = desc;
    }

    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("冬天","白雪皑皑");
}

1.2 使用enum定义枚举类

  • 使用enum定义的枚举类默认继承了java.lang.Enum类,因此不能再继承其他类
  • 枚举类的构造器只能使用private 权限修饰符
  • 必须在枚举类的第一行声明枚举类对象
public enum SeasonEnum {
    //在类的最前面定义所以的对象,多个对象之间使用逗号分割
    //当对象定义结束之后,最后一个对象使用分号
    SPRING("春天","温暖"),
    SUMMER("夏天","炎热");

    private final String NAME;
    private final String DESC;

    private SeasonEnum(String name, String desc) {
        this.NAME = name;
        this.DESC = desc;
    }

    public String getNAME() {
        return NAME;
    }

    public String getDESC() {
        return DESC;
    }
    //使用final定义了,所以没有set方法
}

测试类:

public class SeasonEnumTest {
    public static void main(String[] args) {
        System.out.println(SeasonEnum.SPRING.getNAME()+" " + SeasonEnum.SPRING.getDESC());
        System.out.println(SeasonEnum.SUMMER);
    }
}

运行结果:

春天 温暖
SUMMER

1.3 枚举实现接口

  • 和普通Java类一样,枚举类可以实现一个或多个接口
public interface ColorInfo {
    void show();
    String getColor();
}
public enum Season implements ColorInfo{
    SPRING("春天","绿意盎然"),
    SUMMER("夏天","红日似火");

    private final String name;
    private final 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 void show() {
        System.out.println("季节名称:" + name + " 季节描述:" + desc);
    }

    @Override
    public String getColor() {
        return "red";
    }
}

1.4 Enum 类的主要方法

返回值类型方法
protectedObject clone() 抛出CloneNotSupportedException。
intcompareTo(E o) 将此枚举与指定的对象进行比较以进行订购。
booleanequals(Object other) 如果指定的对象等于此枚举常量,则返回true。
protected voidfinalize() 枚举类不能有finalize方法。
getDeclaringClass() 返回与此枚举常量的枚举类型相对应的Class对象。
inthashCode() 返回此枚举常量的哈希码。
Stringname() 返回此枚举常量的名称,与其枚举声明中声明的完全相同。
intordinal() 返回此枚举常数的序数(其枚举声明中的位置,其中初始常数的序数为零)。
StringtoString() 返回声明中包含的此枚举常量的名称。
static <T extends Enum> TvalueOf(类 enumType, String name) 返回具有指定名称的指定枚举类型的枚举常量。

2 注解

从jdk1.5新增的一个对元数据的解释说明的标记(Annotation)

Annotation可以修饰类 包 构造器 方法 成员变量 局部变量等。注解就可以理解为一个修饰符

  1. 文档的说明

    生成文档注释的时候 ,我们希望可以在生成的文档中形成更好的说明,往往我们会使用一些文档的注解:

    @author 标明开发该类模块的作者,多个作者之间使用,分割

    @version 标明该类模块的版本

    @see 参考转向,也就是相关主题

    @since 从哪个版本开始增加的

    @param 对方法中某参数的说明,如果没有参数就不能写

    @return 对方法返回值的说明,如果方法的返回值类型是void就不能写

    @exception 对方法可能抛出的异常进行说明 ,如果方法没有用throws显式抛出的异常就不能写

    @param @return 和 @exception 这三个标记都是只用于方法的。

    @param的格式要求:@param 形参名 形参类型 形参说明

    @return 的格式要求:@return 返回值类型 返回值说明

    @exception的格式要求:@exception 异常类型 异常说明

  2. 进行代码的格式校验

    @Override 校验方法是否满足重写的要求

    @Deprecated 表示该方法已过时 不建议使

    @SuppressWarnings: 抑制编译器警告,可以带参数

  3. @interface:可以自定义注解

@WebService:标识一个 Java 类或一个 Java 接口 Web 服务

  1. 实例
//在编译时进行格式检查(JDK内置的三个基本注解)
/*
    @Override 重写父类方法,该注解只能用于方法
    @Deprecated 表示所修饰的元素、类、方法等已过时。但是也可以用
    @SuppressWarnings 抑制编译器警告
 */
public class AnnotationTest {
    public static void main(String[] args) {
        @SuppressWarnings("unused")
                int a = 10;
    }
    @Deprecated
    public void print(){
        System.out.println("过时的方法");
    }
    @Override
    public String toString(){
        return "重写的toString方法";
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BORN(^-^)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值