枚举:自定义枚举类
使用Enum关键字定义的枚举类
注解:jdk内置的基本注解类型(3个)
自定义注解类型
对注解进行注解(元注解4个)
利用反射获取注解信息(反射部分涉及)
自定义枚举类:
TestSeason
package com.aff.Gen; //自定义的枚举类 public class TestSeason { public static void main(String[] args) { Season spring = Season.SPRING; System.out.println(spring); spring.show(); System.out.println(spring.getSeasonName()); } } // 枚举类 class Season { // 1. 提供类的属性,声明private final private final String seasonName; private final String seasonDesc; // 2.声明为final的属性,在构造器中初始化 public Season(String seasonName, String seasonDesc) { super(); this.seasonName = seasonName; this.seasonDesc = seasonDesc; } // 3.通过公共的方法来调用属性 public String getSeasonName() { return seasonName; } public String getSeasonDesc() { return seasonDesc; } // 4.创建枚举类的对象 president public static final Season SPRING = new Season("spring", "春暖花开"); public static final Season SUMMER = new Season("Summer", "夏日炎炎"); public static final Season AUTUMN = new Season("Autumn", "秋高气爽"); public static final Season WINTER = new Season("Winter", "白雪皑皑"); @Override public String toString() { return "Season [seasonName=" + seasonName + ", seasonDesc=" + seasonDesc + "]"; } public void show() { System.out.println("这是一个季节"); } }
使用Enum关键字定义的枚举类:
TestSeasonEnum
package com.aff.Gen; //使用Enum关键字定义的枚举类 /* 常用的方法: values() :以数组的形式返回整个枚举类的对象。 valuesOf(String name) : 传入字符串,返回枚举类的对象 如何让枚举类实现接口: 可以让不同枚举类的对象调用被重写的抽象方法,执行的效果不同 相当于让每一个对象从重写抽象方法; */ public class TestSeasonEnum { public static void main(String[] args) { Season1 spring = Season1.SPRING; System.out.println(spring);//Season1 [seasonName=spring, seasonDesc=春暖花开] spring.show();//c春天在那 System.out.println(spring.getSeasonName());//spring //values() Season1[] season = Season1.values(); for(int i = 0;i<season.length;i++){ System.out.println(season[i]); } //valuesOf(String name); 要求传入的形参name是枚举类的对象的名字 //否则,报 java.lang.IllegalArgumentException String str = "SPRING"; Season1 s = Season1.valueOf(str); System.out.println(s);//Season1 [seasonName=spring, seasonDesc=春暖花开] s.show();//c春天在那 //枚举类:线程的state Thread.State[] state = Thread.State.values(); for(int i = 0;i<state.length;i++){ System.out.println(state[i]); } } } interface Info{ void show(); } // 枚举类 enum Season1 implements Info{ SPRING ("spring", "春暖花开"){ public void show() { System.out.println("c春天在那"); } }, SUMMER ("Summer", "夏日炎炎"){ public void show() { System.out.println("这是一个夏节"); } }, AUTUMN ("Autumn", "秋高气爽"){ public void show() { System.out.println("这是一个秋节"); } }, WINTER ("Winter", "白雪皑皑"){ public void show() { System.out.println("这是一个冬节"); } }; 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; } @Override public String toString() { return "Season1 [seasonName=" + seasonName + ", seasonDesc=" + seasonDesc + "]"; } /* public void show() { System.out.println("这是一个季节"); }*/ }
注解:
package com.aff.Gen; import java.util.ArrayList; import java.util.List; /* 注解 1.jdk提供的常用的注解 @Override:限定重写父类方法,该注释只能用于方法 @Deprecated:用于表示某个程序 (类,方法等) 已过时 @SuppressWarnings:抑制编译器警告 2.如何自定义一个注解 3.元注解 1>@Retention: |----只能用于修饰一个 Annotation 定义, 用于指定该 Annotation 可以保留多长时间, @Rentention 包含一个 RetentionPolicy 类型的成员变量 使用 @Rentention 时必须为该 value 成员变量指定值: |---- RetentionPolicy.SOURCE: 编译器直接丢弃这种策略的注释 |---- RetentionPolicy.CLASS: 编译器将把注释记录在 class 文件中. 当运行 Java 程序时, JVM 不会保留注解。 这是默认值 |---- RetentionPolicy.RUNTIME:编译器将把注释记录在 class 文件中. 当运行 Java 程序时, JVM 会保留注释. 程序可以通过反射获取该注释 2>@Target |---- 用于修饰 Annotation 定义, 用于指定被修饰的 Annotation 能用于修饰哪些程序元素. @Target 也包含一个名为 value 的成员变量. 3>@Documented |---- 用于指定被该元 Annotation 修饰的 Annotation 类将被 javadoc 工具提取成文档. 定义为Documented的注解必须设置Retention值为RUNTIME。 4>@Inherited |---- 被它修饰的 Annotation 将具有继承性.
如果某个类使用了被 @Inherited 修饰的 Annotation, 则其子类将自动具有该注解 实际应用中,使用较少 */ public class TestAnnotation { public static void main(String[] args) { Person p = new Student(); p.walk(); @SuppressWarnings({ "rawtypes", "unused" }) List list = new ArrayList(); } } @MyAnnotation("afangfang") class Student extends Person { @Override public void walk() { System.out.println("学生走轮"); } @Override public void eat() { System.out.println("学生吃饭"); } } @Deprecated class Person { String name; int age; public Person() { super(); } public Person(String name, int age) { this.name = name; this.age = age; } public void walk() { System.out.println("走轮"); } public void eat() { System.out.println("吃饭"); } }
自定义注解:
MyAnnotation
package com.aff.Gen; //自定义的注解 public @interface MyAnnotation { String value() default "hello"; }