枚举类
枚举类的理解
- 类的对象是有限个的,确定的
- 当需要定义一组常量时,强烈建议枚举类
public class SeasonTest {public static void main(String[] args) {Season spring = Season.SPRING;System.out.println(spring);}
}
class Season{private final String seasonName;private final String seasonDesc;private Season(String seasonName,String seasonDesc){this.seasonName=seasonName;this.seasonDesc=seasonDesc;}public static final Season SPRING=new Season("春天","春暖花开");public static final Season SUMMER=new Season("夏天","夏日炎炎");public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}@Overridepublic String toString() {return "Season{" +"seasonName='" + seasonName + '\'' +", seasonDesc='" + seasonDesc + '\'' +'}';}
}
public class SeasonTest1 {public static void main(String[] args) {Season1 summer = Season1.SUMMER;System.out.println(summer);}
}enum Season1{SPRING("春天","春暖花开"),SUMMER("夏天","夏日炎炎");private final String seasonName;private final String seasonDesc;private Season1(String seasonName,String seasonDesc){this.seasonName=seasonName;this.seasonDesc=seasonDesc;}public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}}
Enum类常用方法
方法 | 说明 |
---|
values() | 返回枚举类型的对象数组 |
valueof(String str) | 返回枚举类中对象名是str的对象 |
toString() | 返回当前枚举对象常量的名称 |
public class SeasonTest1 {public static void main(String[] args) {Season1 summer = Season1.SUMMER;System.out.println(summer);System.out.println(summer.toString());Season1[] values = Season1.values();for (int i = 0; i < values.length; i++) {System.out.println(values[i]);}Season1 summer1 = Season1.valueOf("SUMMER");System.out.println(summer1);}
}enum Season1{SPRING("春天","春暖花开"),SUMMER("夏天","夏日炎炎");private final String seasonName;private final String seasonDesc;private Season1(String seasonName,String seasonDesc){this.seasonName=seasonName;this.seasonDesc=seasonDesc;}public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}}
使用enum关键字定义枚举类实现接口的情况
public class SeasonTest2 {public static void main(String[] args) {Season2 spring = Season2.valueOf("SPRING");spring.show();}
}
interface info{void show();
}
enum Season2 implements info{SPRING("春天","春暖花开"),SUMMER("夏天","夏日炎炎");private final String seasonName;private final String seasonDesc;private Season2(String seasonName,String seasonDesc){this.seasonName=seasonName;this.seasonDesc=seasonDesc;}public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}@Overridepublic void show() {System.out.println("展示一段话");}
}
public class SeasonTest2 {public static void main(String[] args) {Season2 spring = Season2.valueOf("SPRING");spring.show();}
}
interface info{void show();
}
enum Season2 implements info{SPRING("春天","春暖花开"){@Overridepublic void show() {System.out.println("春天展示");}},SUMMER("夏天","夏日炎炎"){@Overridepublic void show() {System.out.println("夏天展示");}};private final String seasonName;private final String seasonDesc;private Season2(String seasonName,String seasonDesc){this.seasonName=seasonName;this.seasonDesc=seasonDesc;}public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}
}
注解(Annotation)
- Annotation是代码中的特殊标记
- 在编译,类加载,运行时被读取,并执行对应的操作
- Annontation可以像修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,参数,局部变量声明
生成文档相关的注解
注解 | 说明 |
---|
@author | 表明开发该类的作者,多个用‘,’分割 |
@version | 表明该类模块的版本 |
@see | 参考转向,也就是主题 |
@since | 从哪个版本开始增加的 |
@param | 对方法中某参数说明,没参数就不写 |
@return | 对方法返回值说明,void就不写 |
@exception | 对方法可能抛出异常说明,没throw显示抛出异常就不写 |
注:
- @param,@return,@exception这三个方法只用于方法
- @param格式要求 @param 形参名,形参类型,形参说明
- @return格式要求 @return 返回值类型 返回值说明
- @exception格式要求 @exception 异常类型,异常说明
编译时进行格式检查(JDK内置三个基本注解)
注解 | 说明 |
---|
@Override | 限定重写父类方法 |
@Deprecated | 用于表示所修饰的元素已过时 |
@SuppressWarnings | 抑制编译器警告 |
跟踪代码依赖性,实现替代文件配置功能
- Servlet3.0提供了注解,使得不再需要在web.xml文件中进行Servlet的部署
- Spring中事务管理
自定义注解
- 注解声明为@interface
- Annotation的成员变量在定义中以无参数方式方法的形式来声明,其方法名和返回值定义了该成员的名字和类型
- 如何自定义成员没有值,起到标识作用
public @interface MyAnnotation {String value() default "hello";
}
JDK中的元注解
注解 | 说明 | 取值 |
---|
@Retention | 只能用于修饰一个Annotation定义,用于指定该Annotation类的生命周期,@Retention包含一个RetentionPolicy类型的成员变量 | SOURCE(编译时抛弃)CLASS(不加载到内存里)RUNTIME(加载到内存,通过反射获取) |
@Target | 用于修饰Annotation,用于指定修饰的Annotation能用于修饰哪些程序元素 | CONSTRUCTOR(构造器)FIFLD(域)LOCAL_VARIABLE(局部变量)METHOD(方法) |
@Documented | 该Annotation类将被javadoc工具提成文档 | |
@Inherited | 被他修饰的Annotation将具有继承性 | |
可重复注解
- 可以在一个类上多次注解
- 在MyAnnotation上声明@Repeatable,成员之为MyAnnotations.class
- MyAnnotation的Target和Retention等元注解和MyAnnotations相同