枚举
1,枚举类的说明
- 1.枚举类的理解,类的对象只有有限个,确定的。我们称此类为枚举类
- 2.当需要定义一组常量时,强烈建议使用枚举类
- 3.当枚举对类中只有一个对象,则可以作为单例模式的实现方式。
2,使用enum关键字枚举类
enum Season1{
//1.提供当前枚举类的多个对象,多个对象之间用,分割。
SPTING("春天","浅草才能没马蹄"),
SUMMER("夏天","夏日炎炎"),
AUTUMN("秋天","古道西风瘦马"),
WINTER("冬天","程门立雪");
//2.声明Season对象的属性:private final修饰
private final String seasonName;
private final String seasonDesc;
//3.私有化类的构造器:并给对象属性赋值
private Season1(String seasonName,String seasonDesc){
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//4.其他诉求:获取枚举对象的属性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
}
3,使用enum定义枚举类之后,枚举类常用方法:(继承于java.lang.Enum类)
Season1 summer = Season1.SUMMER;
//toString():返回枚举类对象的名称
System.out.println(summer.toString());
System.out.println(Season1.class.getSuperclass());
System.out.println("***********************************");
//values:返回所有枚举类对象构成的数组
Season1[] values = Season1.values();
for (int i = 0; i < values.length; i++) {
System.out.println(values[i]);
values[i].show();
}
System.out.println("**********************");
//Thread.State
Thread.State[] values1 = Thread.State.values();
for (int i = 0; i < values1.length; i++) {
System.out.println(values1[i]);
}
System.out.println("**********************************");
//valueOf(String objName):返回枚举类中对象名是objName的对象。
Season1 winter = Season1.valueOf("WINTER1");
System.out.println(winter);
4,使用enum定义枚举类之后,如何让枚举类对象分别实现接口
interface Info{
void show();
}
//使用enum关键字枚举类
enum Season1 implements Info{
//1.提供当前枚举类的多个对象,多个对象之间用,分割。
SPTING("春天","浅草才能没马蹄"){
@Override
public void show() {
System.out.println("春眠不觉晓");
}
},
SUMMER("夏天","夏日炎炎"){
@Override
public void show() {
System.out.println("夏天的包包");
}
},
AUTUMN("秋天","古道西风瘦马"){
@Override
public void show() {
System.out.println("秋风送爽");
}
},
WINTER("冬天","程门立雪"){
@Override
public void show() {
System.out.println("冬天里的一把火");
}
};
注解
1,注解的理解
-
1.jdk5.0 新增的功能
-
2.Annotation 其实是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并且程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。
-
3.在javaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。
-
在javaEE/Android中注解占据了更重要的角色,例如用来配置应用程序的任何页面,代替JavaEE旧版中所遗留繁琐代码和XML配置等。
-
框架 = 注解 + 反射机制 + 设计模式
2,注解的使用示例
- 1.生成文档相关的注解。
- 2.在编译时进行格式检查(JDK内置的三个基本注解)
- @Override:限定重写父类方法,该注解只能用于方法
- @Deprecated:用于表示所修饰的元素(类,方法等)已过时。通常是因为所修饰的结构危险
- @SuppressWarnings:抑制编译器警告。
3,如何自定义注解
-
3.1注解声明为:@interface
-
3.2内部定义成员,通常使用value表示
-
3.3可以指定成员的默认值,使用dafault定义
-
3.4如果自定义注解没有成员,表明是一个表示作用。
3.1说明
-
如果注解有成员,在使用注解时,需要指明成员的值。
-
自定义注解必须配上注解的信息处理流程(使用反射)才有意义。
-
自定义注解通常都会知指明两个元注解:Retention,Target。
3.2,代码举例
@Inherited
@Repeatable(MyAnnotation.class)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD,
ElementType.PARAMETER,ElementType.CONSTRUCTOR,
ElementType.LOCAL_VARIABLE,ElementType.TYPE_PARAMETER.TYPE_USE})
public @interface MyAnnotation {
String value() default "baobao";
}
4,元注解:对现有的注解进行解释说明的注解
—>类比:元数据的概念:String name = “Tom”;
5,如何获取注解信息
通过发射来进行获取,调用。
前提:要求此注解的元注解Retention中声明的生命周期状态为:RUNTIME。
6,JDK8中注解的新特性:可重复注解,类型注解
-
6.可重复注解。
-
6.1在MyAnnotation上声明@Repeatable,成员值为MyAnnotations.class
-
6.2MyAnnotation的Target和Retention等元注解与MyAnnotations相同。
-
7.类型注解:
-
ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中(如:泛型声明);
-
ElementType.TYPE_USE 表示该注解能写在使用类型的任何语句中。