JDK1.5 之后的系统中,内建了3个注解(Annotation)
1、@Override:表示覆写操作,这个注解在子类重写父类的方法的时候可以用到,也就是重写。在我现阶段的开发中这个注解是用的次数最多的;
2、@Deprecated:注解表示不建议使用的操作。这个注解写上去以后,是为了告诉调用这个方法的人,最好不好调用这个方法了,因为这个方法已经过时了,以后可能要把这个方法去掉;
3、@SuppressWarnings:表示压制警告。在平时开发的过程中,我们经常会在代码中出现一些黄色线条标志的代码,而那些代码就是警告,我的项目经理和我说,作为一个合格的程序员,在代码中最好是不要出现黄线,这个注解就是告诉编译器,这块警告我知道了,不要显示出来了。
但是在我们日常的工作中,很大一部分注解都是自定义的,包括很多框架中使用到的注解。
package AnnotationDemo;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(value={ElementType.METHOD,ElementType.TYPE})
@Retention(value=RetentionPolicy.RUNTIME)
public @interface AnnotationTestDemo02 {
public String username() default "QQ";
}
上面这行代码中,@interface自定义注解。自定义注解默认是继承自java.lang.annotation.Annotation。其中上面@Target、@Retention是元注解,也就是java本身提供的专门用于注解自定义注解的注解。
@Target注解:表明了该注解的使用对象,主要包括以下几种:
1、只能在Annotation中出现:public static final ElementType ANNOTATION_TYPE;
2、只能在构造方法中出现:public static final ElementType CONSTRUCTOR;
3、本地变量上使用:public static final ElementType LOCAL_VARIABLE;
4、只能在方法上使用:public static final ElementType METHOD;
5、在参数声明上使用:public static final ElementType PARAMETER;
6、在包的声明上使用:public static final ElementType PACKAGE;
7、只能在类或接口上使用:public static final ElementType TYPE;
@Retention:表示注解存在的范围,会有以下几种情况
1、public static final RetentionPolicy SOURCE :只在源码中起作用,最典型的注解就是@Override,这个覆写注解仅仅存在于源码中,为编译器使用。
2、public static final RetentionPolicy CLASS:只在编译之后的class中起作用。
3、public static final RetentionPolicy RUNTIME:在运行的时候起作用。
如果一个Annotation想要起作用的话,必须使用RUNTIME范围。以下是四种元注解
- Documented 指示某一类型的注释将通过 javadoc 和类似的默认工具进行文档化。
- Inherited 指示注释类型被自动继承。
- Retention 指示注释类型的注释要保留多久。
- Target 指示注释类型所适用的程序元素的种类。
还有一点就是注解是通过反射来实现的。