深圳网站建设ejaket,石材网站建设方案,三合一网站包含什么,重庆今天最新消息第八章#xff1a;枚举类与注解
8.1#xff1a;枚举类的使用
类的对象只有有限个#xff0c;确定的。我们称此类为枚举类。当需要定义一组常量是#xff0c;强烈建议使用枚举类。如果枚举类中只有一个对象#xff0c;则可以作为单例模式的实现方式。 如何定义枚举类 …第八章枚举类与注解
8.1枚举类的使用
类的对象只有有限个确定的。我们称此类为枚举类。当需要定义一组常量是强烈建议使用枚举类。如果枚举类中只有一个对象则可以作为单例模式的实现方式。 如何定义枚举类 方式一JDK5.0之前自定义枚举类。 public class SeasonTest {public static void main(String[] args) {Season spring Season.SPRING;System.out.println(spring); // Season{seasonName春天,seasonDesc春暖花开}}
}
//自定义枚举类
class Season{//1.声明Season对象的属性:private final修饰private final String seasonName;private final String seasonDesc;//2.私有化类的构造器,并给对象属性赋值private Season(String seasonName,String seasonDesc){this.seasonName seasonName;this.seasonDesc seasonDesc;}//3.提供当前枚举类的多个对象public static final的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(冬天,冰天雪地);//4.其他诉求1获取枚举类对象的属性public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}//4.其他诉求1提供toString()Overridepublic String toString() {return Season{ seasonName seasonName \ , seasonDesc seasonDesc \ };}
}方式二JDK5.0可以使用enum关键字定义枚举类。 public class SeasonTest1 {public static void main(String[] args) {Season1 summer Season1.SUMMER;System.out.println(summer); // Season{seasonName春天,seasonDesc春暖花开}System.out.println(Season1.class.getSuperclass()); // Enum}
}
//使用enum关键字枚举类
enum Season1 implements Info{//1.提供当前枚举类的对象多个对象之间用,隔开末尾对象;结束SPRING(春天,春暖花开),SUMMER(夏天,夏日炎炎),AUTUMN(秋天,秋高气爽),WINTER(冬天,冰天雪地);//2.声明Season对象的属性:private final修饰private final String seasonName;private final String seasonDesc;//2.私有化类的构造器,并给对象属性赋值private Season1(String seasonName,String seasonDesc){this.seasonName seasonName;this.seasonDesc seasonDesc;}//4.其他诉求1获取枚举类对象的属性public String getSeasonName() {return seasonName;}public String getSeasonDesc() {return seasonDesc;}//4.其他诉求1提供toString()Overridepublic String toString() {return Season1{ seasonName seasonName \ , seasonDesc seasonDesc \ };}
}Enum类中常用的方法 values()返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。valueOf(String str)返回枚举类中对象名str的对象如果没有就抛异常。toString()返回当前枚举类对象常量名称。 Season1 summer Season1.SUMMER;
//toString():返回枚举类对象的名称
System.out.println(summer.toString());
//values():返回所有的枚举类对象构成的数组
Season1[] values Season1.values();
for(int i 0;i values.length;i){System.out.println(values[i]);
}
//valueOf(String objName):返回枚举类中对象名是objName的对象。
Season1 winter Season1.valueOf(WINTER);
System.out.println(winter);使用enum关键字定义的枚举类实现接口的情况 情况一实现接口在enum类中实现抽象方法。情况二让枚举类的对象分别实现接口中的抽象方法。
8.2注解 理解注解(Annotation) 从JDK 5.0开始Java增加了对元数据MetaData的支持也就是Annotation(注解)。Annotation其实就是代码里的特殊标记这些标记可以在编译类加载运行时被读取并执行相应的处理。通过使用Annotation程序员可以在不改变原有逻辑的情况下在源文件中嵌入一些补充信息。 注解实例 Override限定重写父类方法该注解只能用于方法。 class Person{private String name;private int age;public Person() {}public Person(String name, int age) {this.name name;this.age age;}public void walk() {System.out.println(人走路);}
}class Student extends Person{Overridepublic void walk() {System.out.println(学生走路);}
}Deprecated用于表示所修饰的元素(类方法等)已过时。通常是因为所修饰的结构危险或存在更好的选择。 Deprecated
public Date(int year, int month, int date) {this(year, month, date, 0, 0, 0);
}SuppressWarnings抑制编译器警告。 SuppressWarnings(unused)
int num 10;
SuppressWarnings({unused, rawtypes})
ArrayList list new ArrayList();自定义Annotation 注解类型声明为interface。自定义注解自动继承了java.lang.annotation.Annotation接口。注解的成员变量在Annotation定义中以无参数方法的形式来声明。其方法名和返回值定义了该成员的名字和类型。我们称为配置参数。类型只能是八种基本数据类型、String、Class、enum、Annotation类型。内部定义成员通常使用value表示。可以指定成员的默认值使用default定义。如果定义的注解含有配置参数那么使用时必须指定参数值除非它有默认值。格式是参数名 参数值如果只有一个参数成员且名称为value可以省略value。如果自定义注解没有成员表名是一个标识作用。 public interface MyAnnotation {String value() default hello;
}注意自定义注解必须配上注解的信息处理流程才有意义。 JDK中的元注解 JDK的元Annoation用于修饰其他Annotation定义。 JDK 5.0提供了4个标准的meta-annontation类型分别是 Retention 只能用于修饰一个Annotation定义用于指定该Annotation的生命周期Rentention包含一个RetentionPolicy类型的成员变量使用Rentention时必须为该value成员变量指定值 RetentionPolicy.COURCE在源文件中有效(即源文件保留)编译器直接丢弃这种策略的注释。RetentionPolicy.CLASS在class文件中有效(即class保留)当运行Java程序时不会保留注解。这是默认值。RetentionPolicy.RUNTIME在运行时有效(即运行时保留)当运行Java程序时JVM会保留注释。程序可以通过反射获取该注释。 Target 用于修饰Annotation定义用于指定被修饰的Annotation能用于修饰哪些程序元素。Target也包含一个名为value的成员变量。 Documented 用于指定被该元Annotation修饰的Annotation类将被javadoc工具提取成文档。默认情况下javadoc是不包括注解的。 定义为Documented的注解必须设置Retention值为RUNTIME。 Inherited 被它修饰的Annotation将具有继承性。如果某个类使用了被Inherited修饰的Annotation则其子类将自动具有该注解。 JDK 8中注解的新特性 可重复注解 在MyAnnotation上声明Repeatable成员值为MyAnnotations.classMyAnnotation的Target和Retention等元注解与MyAnnotations相同 Inherited
Repeatable(MyAnnotations.class)
Retention(RetentionPolicy.RUNTIME)
Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE,TYPE_PARAMETER,TYPE_USE})
public interface MyAnnotation {String value() default hello;
}Inherited
Retention(RetentionPolicy.RUNTIME)
Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE,TYPE_PARAMETER,TYPE_USE})
public interface MyAnnotations {MyAnnotation[] value();
}MyAnnotation(value hi)
MyAnnotation(value abc)
class Person{
}类型注解 ElementType.TYPE_RARAMETER表示该注解能写在类型变量的声明语句中。ElementType.TYPE_USE表示该注解能写在使用类型的任何语句中。