JDK 5.0开始,Java增加了对MetaData(元数据)的支持,即Annotation 1.JDK内置的基本注解类型(3个) @Override:限定重写父类的方法,该注释只能用于方法 @Deprecated:用于表示某个程序元素(类,方法等)已过时 @SuppressWarnings:抑制编译器警告 2.自定义注解: @interface 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");
// }
}