注解(Annotation)不是程序本身,但是可以对程序作出解释,同时注解还可以让其他程序读取。我们可以把注解加在包(package)、类(class)、方法(method)和变量(field)的上面。
注解的格式为 : @注解名
一、内置注解
1、@Override
定义在 java.lang.Override 中 , 此注释只适用于修辞方法 , 表示一个方法声明打算 重写超类中的另一个方法声明,简单来说就是子类在重写父类方法的时候可以加上这个注解。
2、@Deprecated
定义在java.lang.Deprecated中 , 此注释可以用于修辞方法 , 属性 , 类 , 表示不 鼓励程序员使用这样的元素 , 通常是因为它很危险或者存在更好的选择 。即是此方法已经过时,不推使用。
3、@SuppressWarnings
定义在 java.lang.SuppressWarnings 中,用来抑制编译时的警告信息,与前两个注释有所不同,你需要添加一个参数才能正确使用,这些参数都是已经定义好了的, 我们选择性的使用就好了 ,一般我们使用 @SuppressWarnings(“all”)
二、元注解
除了 Java 中为我们定义好的注解,我们还可以自定义注解, Java定义了4个标准的元注解(meta-annotation)类型,他们被用来 提供对其他注解类型作说明 。
1、@Target
用来描述注解的使用范围,即注解可以使用在什么地方,在定义注解的时候使用这个我们可以更加清晰的知道它的使用范围,它的取值范围被定义在了一个类中,如下:
public enum ElementType {
TYPE, //类,接口
FIELD, //成员变量
METHOD, //方法
PARAMETER, //方法参数
CONSTRUCTOR, //构造方法
LOCAL_VARIABLE, //局部变量
ANNOTATION_TYPE, //注解类
PACKAGE, // 包
TYPE_PARAMETER, //类型参数
TYPE_USE //使用类型的任何地方
}
上面这个类中定义的就是它的范围,实例代码如下:
//修饰自定义注解的使用范围
@Target(value = {ElementType.METHOD,ElementType.TYPE,ElementType.FIELD})
//自定义注解
@interface MyAnnotation{
}
2、@Retention注解
表示需要在什么级别保存该注释信息 , 用于描述注解的生命周期。即是,被描述的注解在它所修饰的类中可以被保留到何时,一共有三种策略,被定义在一个类中,如下所示:
public enum RetentionPolicy {
SOURCE, //源文件保留
CLASS, //编译器保留
RUNTIME //运行期保留,可以反射获取注解信息
}
实例代码如下:
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{
}
3、@Documented
描述在使用 javadoc 工具为类生成帮助文档时是否要保留其注解信息。代码如下:
@Documented // 生成DOc文档时候使用
@interface MyAnnotation{
}
4、@Inherited
使用它修饰的注解具有继承性,代码如下:
@Inherited //子类可以继承父类的注解
@interface MyAnnotation{
}
三、自定义注解
自定义注解时使用 @interface 时,自动继承了了 java.lang.annotation.Annotation接口。它的基本语法为:
public @interface CherryAnnotation {
}
在自定义注解中我还可以设置参数,且只有一个参数的时候,默认使用value当做参数名字 , 使用的时候可以省略参数名,格式如下:
@interface MyAnnotation{
String value() default ""; //参数类型,且后面的括号不能省略,可以给一个默认的值
}
自定义注解中定义参数的时候,后面的括号不能省略,且可以给一个默认的参数。