前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 注解

Java 注解

作者头像
烟草的香味
发布2019-07-25 10:57:38
1.2K0
发布2019-07-25 10:57:38
举报
文章被收录于专栏:烟草的香味烟草的香味

概述

注解时在Java5中开始引入的概念。可以将注解想象成标签,给指定的方法、类、变量、参数、包等贴上一个标签。

@Override 注解就是告诉编译器,这个方法是重写的父类方法。

还有@Test、@Deprecated等等

自定义注解

自己定义注解的语法也很简单:

然后就可以使用该注解了。

注意,注解时不可以继承的,默认继承Annotation接口。

在Java中有一些特殊的注解,被称为元注解,简单说就是可以注解注解的注解,用来标识注解的作用范围等,有如下元注解:

1.@Retention

Retention是保留的意思,它标注了注解的存活时间,取值如下:

  • RetentionPolicy.SOURCE:注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。
  • RetentionPolicy.CLASS:注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。
  • RetentionPolicy.RUNTIME:注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。

2.@Documented

Docmented是将注解中的元素包含到Javadoc中

3.@Target

target是目标的意思, 它指明了注解运用的地方,如方法、类等,有如下取值:

  • ElementType.ANNOTATION_TYPE: 对注解进行注解
  • ElementType.CONSTRUCTOR:对构造方法进行注解
  • ElementType.FIELD:对属性进行注解
  • ElementType.LOCAL_VARIABLE:对局部变量进行注解
  • ElementType.METHOD:对方法进行注解
  • ElementType.PACKAGE:对一个包进行注解
  • ElementType.PARAMETER:对一个方法内的参数进行注解
  • ElementType.TYPE:对一个类型进行注解,比如类、接口、枚举

当有多个时用逗号隔开,如:

代码语言:javascript
复制
@Target(value={ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR})

4.@Inherited

Inherited是继承的意思,若一个超类被@Inherited注解过的注解进行了注解的话,那么它的子类如果没有被任何注解进行注解的话,就会继承超类的注解。

5.@Repeatable

Repeatable是可重复的意思,就是说这个注解可以进行多次注解,即可以进行多个注解。

以上就是Java中的元注解。

注解属性:

注解的属性就是他的成员变量,注解只有成员变量,属性在注解中以无参的方法形式来声明,方法名为变量名,返回值为该变量的类型,属性若没有默认值需要在使用的时候进行赋值

属性的声明如下形式:

代码语言:javascript
复制
// int类型的id
int id();
// 字符串类型的msg变量
String msg();
// int类型的id,默认值为-1,即在声明的可以给该变量赋值,为默认值
int id() default -1;

如以下注解:

同时,若注解中只有一个value属性,在使用时可以不指定属性名,如下所示:

若注解中没有任何属性,则使用注解时括号可以省略,如下所示:

以上,就是自定义注解的方式

注解的提取

有了自定义的注解,还要去使用它,下面看看注解的提取

在Java中用来描述注解的基类是Annotation

要提取注解就要使用到反射,Class对象的如下方法:

  • isAnnotationPresent(Class<? extends Annotation>): 验证Class对象是否应用了某个注解
  • getAnnotation(Class<A>): 获取注解对象
  • getAnnotations(): 获取所有注解对象数组,包含从父类继承的
  • getDeclaredAnnotations():获取所有注解对象数组,不包含从父类继承的

注解添加如下:

获取操作如下所示:

运行结果:

需要注意的是,若一个注解需要在运行时被提取,那么@Retention(RetentionPolicy.RUNTIME)是必须的。

以上就是注解的定义与提取

Java预置的注解

  1. @Deprecated:标记过时的方法
  2. @Override:标记重写父类的方法
  3. @SuppressWarnings:阻止警告
  4. @FunctionallInterface:函数式接口注解
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 烟草的香味 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 自定义注解
  • 注解的提取
  • Java预置的注解
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档