1、注解概念
注解就是某种注解类型的一个实例,我们可以用它在某个类、方法等程序元素上进行标注,这样编译器在编译我们的文件时,会根据我们自己设定的方法来编译类。Java注解能够提供代码的相关信息,同时对于所注解的代码结构又没有直接影响。
2、注解的分类
1)元注解:用来自定义注解
@Documented 标记生成javadoc:
@Inherited 标记继承关系
@Retention 注解的生存期
@Target 标注的目标,表明定义的注解可以用在什么地方,值有TYPE,METHOD, CONSTRUCTOR, FIELD等等。如果Target元注解不存在,那么该注解就可以使用在任何程序元素之上
2)内置注解:Java提供3种内置注解
@Override – 当我们想要覆盖父类的一个方法时,需要使用该注解告知编译器我们正在覆盖一个方法。这样的话,当父类的方法被删除或修改了,编译器会提示错误信息。
@Deprecated – 当我们想要让编译器知道一个方法已经被弃用(deprecate)时,应该使用这个注解。Java推荐在javadoc中提供信息,告知用户为什么这个方法被弃用了,以及替代方法是什么。
@SuppressWarnings – 这个注解仅仅是告知编译器,忽略它们产生了特殊警告。
3)一般注解:自定义注解或框架(spring框架)定义的注解
3、创建自定义注解
创建自定义注解与编写接口很相似,除了它的接口关键字前有个@符号,可以看成同class、interface
类似类型:
类定义:class
接口定义:interface
注解定义:@interface加上元注解
package testAnnotation;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Person{
String name();
int age();
}
· 注解方法不能有参数。
· 注解方法的返回类型局限于原始类型,字符串,枚举,注解,或以上类型构成的数组。
· 注解方法可以包含默认值。
· 注解可以包含与其绑定的元注解,元注解为注解提供信息
3、注解解析
package testAnnotation;
//由于该注解没有@Target标注,则可以用在任何程序元素上
@Person(name="xiaohu",age=25)
public class test
{
public static void print(Class c)
{
//通过java.lang.Class的getAnnotation方法获取注解,如果有注解,则返回注解。否则返回null
Person person = (Person)c.getAnnotation(Person.class);
if(person != null)
{
System.out.println("name:"+person.name()+" age:"+person.age());
}
}
public static void main(String[] args){
test.print(test.class);
}
}
输出结果:
name:xiaohu age:25