JDK 5.0开始,Java增加了对MetaData(元数据)的支持,即Annotation
1.JDK内置的基本注解类型(3个) @Override:限定重写父类的方法,该注释只能用于方法 @Deprecated:用于表示某个程序元素(类,方法等)已过时 @SuppressWarnings:抑制编译器警告 2.自定义注解: 3.元注解: 指注解的注解,用于修饰其他Annotation定义 >@Retention 定义注解的保留策略 >@Target 定义注解的作用目标 >@Documented 说明该注解将被包含在javadoc中(必须设置Retention的值为RUNTIME) >@Inherited 说明子类可以继承父类中的该注解(使用较少)
1.@Retention:包含一个RetentionPolicy类型的成员变量,
使用@Retention时必须为该value成员变量指定值:
@Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS) // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,
@Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
2.@Target 也包含一个名为 value的成员变量
@Target(ElementType.TYPE) //接口、类、枚举、注解
@Target(ElementType.FIELD) //字段、枚举的常量
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR) //构造函数
@Target(ElementType.LOCAL_VARIABLE)//局部变量
@Target(ElementType.ANNOTATION_TYPE)//注解
@Target(ElementType.PACKAGE) ///包
Enum
JDK1.5新增的 enum关键字 用于定义枚举类 若枚举只有一个成员(对象),则可以作为一种单例模式的实现方式1.如何自定义枚举类 ( JDK1.5之前 )
package com.step.j2enum;public class TestSeason1 { public static void main(String[] args) { Season spring=Season.SPRING; System.out.println(spring); spring.show(); System.out.println(spring.getSeasonDesc()); }}//枚举类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.创建枚举类的对象; 将类的对象声明 public static final public static final Season SPRING=new Season("spring","春暖花开"); public static final Season SUMMER=new Season("summer","夏日炎炎"); public static final Season AUTUMN=new Season("fall","秋高气爽"); public static final Season WINTER=new Season("winter","白雪皑皑"); @Override public String toString() { return "Season [seasonName=" + seasonName + ", seasonDesc=" + seasonDesc + "]"; } public void show(){ System.out.println("THIS IS A SEASON"); } }
2.如何使用enum关键字定义枚举类 >常用的方法:values(),valueOf(String name) >实现接口:可以让不同的枚举类的对象调用被重写的抽象方法,执行的效果不同。(相当于让每个对象重写抽象方法)
package com.step.j2enum;public class TestSeason2 { public static void main(String[] args) { Season1 spring=Season1.SUMMER; System.out.println(spring); spring.show(); System.out.println(spring.getSeasonDesc()); // 1.values() Season1[] seasons=Season1.values(); for (int i = 0; i < seasons.length; i++) { System.out.print(seasons[i]+" "); }// 2.valueOf(String name) String str ="SPRING"; Season1 sea=Season1.valueOf(str); System.out.println(); System.out.println(sea); Thread.State[] states =Thread.State.values(); for (int i = 0; i < states.length; i++) { System.out.println(states[i]); } sea.show(); }} interface Info { void show(); }enum Season1 implements Info{ //4.创建枚举类的对象; 将类的对象声明 public static final // SPRING("spring","春暖花开"),// SUMMER("summer","夏日炎炎"),// AUTUMN("fall","秋高气爽"),// WINTER("winter","白雪皑皑"); SPRING("spring","春暖花开"){ public void show(){ System.out.println("1"); } }, SUMMER("summer","夏日炎炎"){ public void show(){ System.out.println("2"); } }, AUTUMN("fall","秋高气爽") { public void show(){ System.out.println("3"); } }, WINTER("winter","白雪皑皑"){ public void show(){ System.out.println("4"); } }; //1.提供类的属性,声明为 private final private final String seasonName; private final String seasonDesc; //2.声明为final属性,在构造器中初始化。 private Season1(String seasonName, String seasonDesc) { this.seasonName = seasonName; this.seasonDesc = seasonDesc; } //3.通过公共的方法来调用属性 public String getSeasonName() { return seasonName; } public String getSeasonDesc() { return seasonDesc; } // public void show(){// System.out.println("THIS IS A SEASON");// } }