枚举类
枚举类的理解
- 类的对象是有限个的,确定的
- 当需要定义一组常量时,强烈建议枚举类
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;
}
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
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;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
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;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
使用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;
}
@Override
public void show() {
System.out.println("展示一段话");
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
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("春天","春暖花开"){
@Override
public void show() {
System.out.println("春天展示");
}
},
SUMMER("夏天","夏日炎炎"){
@Override
public 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;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
注解(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相同