Java 注解(Annotation)

什么是注解(Annotation)

  注解是 Java 5 的一个新特性。注解是插入你代码中的一种注释或者说是一种元数据(meta data)。这些注解信息可以在编译期使用预编译工具进行处理(pre-compiler tools),也可以在运行期使用 Java 反射机制进行处理。(来自极客学院

注解作用

  • 生成文档。常用的有@see @param @return 等
  • 跟踪代码依赖性,实现替代配置文件功能。如spring注解配置
  • 在编译时进行格式检查。如@override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出。

元注解

四个元注解:@Target, @Retention, @Documented, @Inherited

@Target

表示注解可以用于什么地方, ElementType 枚举类定义了使用范围如下。

 TYPE         //类、接口或enum声明
 FIELD        //域(属性)声明
 METHOD       //方法声明
 PARAMETER    //参数声明
 CONSTRUCTOR  //构造方法声明
 LOCAL_VARIABLE    //局部变量声明
 ANNOTATION_TYPE   //注释类型声明
 PACKAGE     //包声明
 TYPE_PARAMETER //类型参数声明,下面这两个是1.8新增
 TYPE_USE    //类型使声明

@Retention

表示在什么级别保存该注解信息。可选的参数值在枚举类型 RetentionPolicy 中,如下所示。

RetentionPolicy.SOURCE //注解将被编译器丢弃 
RetentionPolicy.CLASS //注解记录在class文件中,但在VM运行期不会被保留,这个是默认行为
RetentionPolicy.RUNTIME //注解记录在class文件,并且VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。 

@Documented

将此注解包含在Javadoc中

@Inherited

使父类的注解可以继承至子类中,注意注解继承只针对class级别注解有效

自定义注解demo

/***********************类注解StudentInfo****/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface StudentInfo {

    String value() default "";
}

/*********************属性注解StudentInfo****/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface StudentName {

    String value() default "";
}

/******************************注解使用****/
@StudentInfo("studentInfo")
public class Student {

    @StudentName("lily")
    private String name;

    private String age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public static void main(String[] args){

        if(Student.class.isAnnotationPresent(StudentInfo.class)){
            System.out.println(Student.class.getAnnotation(StudentInfo.class).value());
        }
        Field[] fields = Student.class.getDeclaredFields();
        for(Field field : fields){
            if(field.isAnnotationPresent(StudentName.class)){
                StudentName studentName = field.getAnnotation(StudentName.class);
                System.out.println(studentName.value());
            }
        }

    }
}


[参考资料]
深入理解Java:注解(Annotation)自定义注解入门

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值