java注解(Annotation)

java注解是JDK1.5引入的一种机制,可以使用在类、方法、变量、参数或者包上,通过结合反射,aop技术,可以自己写出一个小框架。

一、常见的注解

  • @Override:检查该方法是否是重写方法。
  • Deprecated:标记过时方法。
  • SuppressWarnings:指示编译器去忽略注解中声明的警告。

二、元注解

1.什么是元注解

简单明了的说,元注解就是注解的注解。

2.五种元注解

  • @Target:表示注解的使用范围,范围参数如下(枚举)
    • ElementType.TYPE:作用于类、接口(包括注释类型)或枚举声明
    • ElementType.FIELD:作用于字段(包括枚举常量)
    • ElementType.METHOD:作用于方法
    • ElementType.PARAMETER:作用于参数
    • ElementType.CONSTRUCTOR:作用于构造函数
    • ElementType.LOCAL_VARIABLE:作用于局部变量
    • ElementType.ANNOTATION_TYP:作用于注释类型
    • ElementType.PACKAGE:作用于包
    • ElementType.TYPE_PARAMETER:作用于类型泛型,即泛型方法、泛型类、泛型接口 (jdk1.8 加入)
    • ElementType.TYPE_USE:可以用于标注任意类型除了 class (jdk1.8加入)
  • @Documented:描述在使用 javadoc 工具为类生成帮助文档时是否要保留其注解信息。
  • @Inherited:使被它修饰的注解能被继承(如果某个类使用了被@Inherited修饰的注解,则其子类将自动继承该注解)。
  • @Retention:注解保留的时间范围
    • RetentionPolicy.SOURCE:源文件保留,源码中可见
    • RetentionPolicy.CLASS:编译器保留,class文件可见,运行时不可见(默认值)
    • RetentionPolicy.RUNTIME:运行期保留,可以使用反射获取
  • @Repeatable:用于指示它(元)注释的声明的注释类型是可重复的(jdk1.8加入),示例如下:
import java.lang.annotation.*;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(Values.class)
public @interface Value {
    String value() default "test";
}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@interface Values {
    Value[] value();
}

测试类:

public class AnnotationTest {
    @Value("1")
    @Value("2")
    public void test() {}
}

注意事项:被@Repeatable标注的注解Value的@Retention范围比Values或者相同

三、自定义注解

1.注解的属性类型

  • 基本数据类型
  • String
  • 枚举
  • 注解类型
  • Class类型
  • 以上类型的一维数组类型

2.示例

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    String name();
}

疑问:注解的属性为什么有括号,返回值不能用void

答:注解中只能有静态常量,相比普通类,注解中的静态常量显然是没有什么意义的,此时其中的方法便替代成为了属性,由于本身是方法,所以带括号,与接口不同,我们可以在注解的括号中给成员变量赋值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值