Java基础---注解

来源:互联网 发布:mac wifi管理软件 编辑:程序博客网 时间:2024/05/22 10:06

Annotation概述

从JDK5.0开始,Java增加了对元数据(MetaData)的支持,也就是Annotation(注解)。

  • Annotation其实就是代码里的特殊标记,这些标记可以再编译,类加载,运行时被读取,并执行相应的处理。通过使用Annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。
  • Annotation可以像修饰符一样被使用,可用于修饰包、类、构造方法、方法、成员变量、参数、局部变量的声明,这些信息被保存在Annotation的“name=value”对中;
  • Annotation能被用来为程序元素(类、方法、成员变量等)设置元数据

常用Annotation

三个基本的Annotation:

  • @Override:限定重写父类方法,该注解只能用于方法
  • @Deprecated:用于表示某个程序元素(类、方法等)已过时
  • @SuppressWarnings:抑制编译器警告

自定义Annotation

  • 定义新的Annotation类型使用@interface关键字
  • Annotation的成员变量在Annotation定义中以无参数方法的形式来声明,其方法名和返回值定义了该成员变量的名字和类型,且该方法是默认public和abstract的
  • 可以在定义Annotation的成员变量时为其指定初始值,并用default关键字
  • 没有成员定义的Annotation称为标记;包含成员变量的Annotation称为元数据Annotation
/** * 1.使用@interface定义注解 * 2.使用类似于接口方法声明的方式来定义注解的属性:其中返回值称为属性的类型,方法名为属性的名称 */public @interface HelloAnnotation{    public abstract String name() default "abc";}

Tips:

  • 1、如果只有一个属性名为value的属性需要设置,则可以直接设置。value的类型可以为任意,String和int都行。比如Target的value类型为ElementType[]。
  • 2、如果数组属性中只有一个元素,这时候属性值部分可以省略大括号
String[] sdfs() default "sfs";@HelloAnnotation(sdfs="sdf",value=5)
  • 3、注解的属性值,也可以是注解。
  • 4、属性值的类型,可以是基础类型,String,Class,注解,枚举,以及这几种类型的数组。

JDK的元Annotation

@Retention

@Retention:只能用于修饰一个Annotation定义,用于指定该Annotation可以保留多长时间。包含一个RetentionPolicy类型的成员变量,该成员变量为Enum类型,包含下面三个值:

  • RetentionPolicy.SOURCE:
  • RetentionPolicy.CLASS
  • RetentionPolicy.RUNTIME

分别对应:java源文件—class文件—内存中的字节码

@Target

@Target:用于修饰Annotation定义,用于指定被修饰的Annotation能用于修饰哪些程序元素。@Targer也包含一个名为value的成员变量,该成员变量为ElementType类型的数组。ElementType是一个Enum类:

  • ElementType .TYPE
  • ElementType .FIELD
  • ElementType . METHOD
  • ElementType . PARAMETER
  • ElementType .CONSTRUCTOR
  • ElementType . LOCAL_VARIABLE
  • ElementType . ANNOTATION_TYPE
  • ElementType .PACKAGE

@Documented

@Documented:用于指定被该元Annotation修饰的Annotation类将被javadoc工具提取成文档

@Inherited

@Inherited:被它修饰的Annotation将具有继承性。如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解

对应用了注解的类进行反射操作

if(MainActivity.class.isAnnotationPresent(Deprecated.class)){            Deprecated deprecated=(Deprecated)MainActivity.class.getAnnotation(Deprecated.class);}

interface AnnotatedElement 有四个方法:

  • <T extends Annotation> T getAnnotation(Class<T> annotationType);
  • Annotation[] getAnnotations();
  • Annotation[] getDeclaredAnnotations();
  • boolean isAnnotationPresent(Class<? extends Annotation> annotationType);

43. java视频教程Java基础注解-原创视频-爱奇艺
34_Java基础加强_注解的定义与反射调用-教育视频-爱奇艺
35_Java基础加强_为注解增加各种属性-教育视频-爱奇艺
公共技术点之 Java 注解 Annotation 注解指能够添加到 Java 源代码的语法元数据。类、方法、变量、参数、包都可以被注解,可用来将信息元数据与程序 @codeKK 开源项目源码分析站
深入浅出Java注解 - 张明云的知识共享 - 知乎专栏
https://zhuanlan.zhihu.com/p/21410338?f3fb8ead20=ab6494355b08c31498a9660fe2f66b1e
深入理解Java注解(2):高级应用 - Jack Zhou的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/zhoudaxia/article/details/33731583

0 0
原创粉丝点击