java中注解

本文详细介绍了Java注解的概念、创建方式、@Override与@Deprecated的使用,以及注解的属性定义。同时,讲解了元注解@Target和@Retention的作用,并通过实例展示了如何通过反射获取注解属性的值。最后,阐述了注解在代码中的重要作用,包括作为标签、限制和说明等功能。

1.什么是注解

注解是一种注释,可用于标志类,方法,属性等地方。可以通过反射机制判断类中某个地方是否有对应注解然后做进一步操作。注解可以有属性,可以通过反射机制拿到注解的属性的值。

注解经过编译后同样会生成xxx.class文件

2.如何创建注解

与创建接口类似,用@interface

[修饰符列表] @interface 注解名{
}

3.@Override与@Deprecated注解

@Override注解只能用于方法上,表示方法重写父类方法。

@Deprecated注解表示方法已过时,谨慎使用。

4.注解中定义属性

属性类型 属性名() [default xxx (可选)];

5.使用注解

在注解允许作用的地方加上注解即可。若注解有属性,必须将没有默认值的属性全部设置。如@Abc(value=1,name="zhangsan")。若注解只有一个属性且属性名为value可以省略value赋值,@Abc(1)

6.元注解

元注解是注解上的注解。常用的元注解有@Target @Retention

@Target

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
    /**
     * Returns an array of the kinds of elements an annotation type
     * can be applied to.
     * @return an array of the kinds of elements an annotation type
     * can be applied to
     */
    ElementType[] value();
}
public enum ElementType {
    TYPE,
    FIELD,
    METHOD,
    PARAMETER,
    CONSTRUCTOR,
    LOCAL_VARIABLE,
    ANNOTATION_TYPE,
    PACKAGE,
    TYPE_PARAMETER,
    TYPE_USE,
    MODULE,
    RECORD_COMPONENT;
}

Target表示在什么地方使用。@Target注解有一个类型为ElementType[]数组的属性value,ElementType是枚举类型。r如@Target(ElementType.TYPE) 表示只能用在类上     

            @Target({ElementType.TYPE,ElementType.FIELD})表示只能用在类或属性上

@Retention

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
    /**
     * Returns the retention policy.
     * @return the retention policy
     */
    RetentionPolicy value();
}
public enum RetentionPolicy {
//注解只保留在java源文件中
    SOURCE,
//注解保留在class文件中
    CLASS,
//注解保留在class文件中,运行时保留在jvm中,可以被反射机制读取
    RUNTIME
}

Retention表示注解保留的策略。该有一个属性value类型为RetentionPolicy。RetentionPolicy为枚举类。

RetentionPolicy.SOURCE 注解只保留在java源文件中

RetentionPolicy.CLASS 注解保留在class文件中

RetentionPolicy.RUNTIME 注解保留在class文件中,运行时保留在jvm中,可以被反射机制读取

7.通过反射机制获取注解中属性的值

package com.zhaojisu;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(value = {ElementType.TYPE,ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    String value();
    int aa();
}
package com.zhaojisu;
@MyAnnotation(value = "zhaojisu",aa=18)
public class entity {
}
public static void main(String[] args) throws ClassNotFoundException {
        Class<?> aClass = Class.forName("com.zhaojisu.entity");
        boolean  flag= aClass.isAnnotationPresent(MyAnnotation.class);
        if (flag){
            MyAnnotation annotation = aClass.getAnnotation(MyAnnotation.class);
            System.out.println(annotation.value());
            System.out.println(annotation.aa());

        }
    }

8.注解的作用

注解可以是标签,可以是限制,可以是说明等等。注解有时候像是一人的标签。看到这个标签就能知道他是干什么用的。通过反射可以实现对加上某个注解的类进行限制,可以获取注解中的属性值等等功能。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值