枚举类

枚举类的使用

类的对象是有限的,确定的,比如:

  1. 星期
  2. 季节
  3. 性别

当需要定义一组常量是,建议使用枚举类

自定义枚举类

package com.miao.java;

/*
枚举类的使用
*/
public class SeasonTest {
public static void main(String[] args) {
Season spring = Season.SPRING;
System.out.println(spring);
}
}
//自定义枚举类
class Season{
//声明season对象的属性:private final修饰
private final String seasonName;
private final String seasonDesc;

//私有化类的构造器,并给属性赋值
private Season(String seasonName,String seasonDesc){
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//提供当前枚举类的对个对象:public static final
public static final Season SPRING = new Season("春天","春天来了");
public static final Season AUTOMO = new Season("夏天","夏天来了");
public static final Season FAIL = new Season("秋天","秋天来了");
public static final Season WINTER = new Season("冬天","冬天来了");
//其他诉求

public String getSeasonName() {
return seasonName;
}

public String getSeasonDesc() {
return seasonDesc;
}

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

使用enum关键字定义枚举类

package com.miao.java1;

/*
使用enum关键字
定义的枚举类 默认继承于 java.lang.Enum
*/
public class SeasonTest {
public static void main(String[] args) {
Season spring = Season.SPRING;
System.out.println(spring);
System.out.println(Season.class.getSuperclass());
}
}
//使用enum关键字 定义枚举类
enum Season{
//提供当前枚举类的对个对象:多个对象之间用“,”隔开,末尾对象用“;”结束
SPRING("春天","春天来了"),
SUMMER("夏天","夏天来了"),
AUTUMN("秋天","秋天来了"),
WINTER("冬天","冬天来了");
//声明season对象的属性:private final修饰
//私有化类的构造器,并给属性赋值
private final String seasonName;
private final String seasonDesc;

private Season(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 "Season{" +
// "seasonName='" + seasonName + '\'' +
// ", seasonDesc='" + seasonDesc + '\'' +
// '}';
// }
}

Enum类的主要方法

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

注解(Annotation)

注解概述

  • Annotation就是代码里的==特殊标记==,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理
  • Annotation可以像修饰符一样被使用
  • 框架=注解+反射+设计模式

自定义注解

  • 注解声明:@interface
  • 内部定义成员,通常使用value()表示
  • 可以指定成员默认值,使用default定义
  • 如果注解没有成员,表明是一个标识作用
public @interface MyAnnotation {
String value();
}

@MyAnnotation("hello")//
class Person{
private String name;
private int age;
public Person(){
}
}

JDK中的元注解

元注解:解释说明其他注解

  1. Retention:指定所修饰的Annotation的生命周期,@Retention包含一个RetentionPolicy类型的成员变量:
    • RetentionPolicy.SOURCE:在源文件中有效(源文件保留)
    • RetentionPolicy.CLASS:在class文件中有效
    • RetentionPolicy.RUNTIME:在运行时有效
  2. Target:用于指定被修饰的Annotation 能用于修饰哪些程序类型
  3. Documented:表示所修饰的注解被Javadoc解析时可以保留下来
  4. Inherited:被它修饰的Annotation 将具有继承性