加了注解,等于打上了某种标记,没加,则等于没有某种标记,以后,其他程序可以用反射来了解你的类上面有无何种标记,看你有什么标记,就去干相应的事。标记可以加在类,方法,字段,包上,方法的参数上。

(1) Java.lang中最基本的Annotation有 @Deprecated, @Override, @SuppressWarnings三种;其中@Deprecated表示过时或者抛弃不用的element,因为有更好的可以替代或者是原element的使用存在一定危险;

@Override声明了一个方法打算重写父类的方法;利用@Override很多时候可以检测手动重写的方法是否正确;

@SuppressWarnings指示在注释元素以及包含在该注释元素中的所有程序元素中取消显示指定的编译器警告。

针对类的注释,可以用反射Class.isAnnotationPresent(Class<? Extends Annotation> annotationClass)来检测在某个类上是否存在指定的注释类;

针对方法的注释,也可以用反射Class.getMethod. isAnnotationPresent(Class<? Extends Annotation> annotationClass)来检测指定方法上是否存在指定的注释类;

(2)Java.lang.annotation中的接口有以下:

Documented:某一类型的注释被javadoc或者某种类似的工具进行文档化

Inherited:指示注释类型被自动继承

Retention:指示注释类型将会保留多久;其默认值为RetentionPolicy.CLASS(编译器将把注释记录在类文件中,但在运行时VM不需要保留注释。);它还可以取值为RetentionPolicy.SOURCE(编译器要丢弃的注释。)和RetentionPolicy.RUNTIME(编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。)。其中@Override和@SuppressWarnings是RetentionPolicy.SOURCE级别的;@Deprecated是RetentionPolicy.RUNTIME级别的

Target:指示注释类型适用的程序元素的种类;其ElementType的取值可以是ANNOTATION_TYPE(注释类型声明),CONSTRUCTOR(构造器声明),FIELD(属性声明),TYPE等;例如:

@Target({ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

(3)定义自己的MyAnnotation,为MyAnnotation类增加参数,并为参数添加默认值:

public String color() default "green";

public int[] array() default {1,2};

public String value() default "java";

public MetaAnnotation annotation() default @MetaAnnotation("miracle");//有个注释类名为MetaAnnotation;其参数增加也如上所示;由@MetaAnnotation定义default值的方式可知,在@MetaAnnotation类中需要设置的属性值为Value。

如果注解中有一个名称为value的属性,并且其他属性都采用默认值,且只想设置value属性,那么,在使用时可以省略value=,例如:

@MyAnnotation("javaweb")

参数为注解的情况:@MyAnnotation(value="red",annotation=@MetaAnnotation("samuel"))用反射的方法了解User类上是否有注解,什么注解的方法如下,注意数组Annotation的输出方式:

if (User.class.isAnnotationPresent(MyAnnotation.class)){
MyAnnotation myAnnotation = User.class.getAnnotation(MyAnnotation.class);
System.out.println(myAnnotation.color());
System.out.println(Arrays.toString(myAnnotation.array()));
System.out.println(myAnnotation.value());
MetaAnnotation ma = myAnnotation.annotation();
System.out.println(ma.value());
}

本文转自:http://blog.csdn.net/miracle276/article/details/3923945

java.lang和java.lang.annotation中实现Annotation的类小结的更多相关文章

  1. 编写Java程序,创建Dota游戏中的防御塔类,通过两个坐属性显示防御塔所在的位置

    返回本章节 返回作业目录 需求说明: 创建Dota游戏中的防御塔类 通过两个坐属性显示防御塔所在的位置 实现思路: 创建防御塔(TowerDefense)类 在该类中定义了两个属性,分别是int类型横 ...

  2. Caused by: java.lang.ClassNotFoundException: org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

    严重: StandardWrapper.Throwableorg.springframework.beans.factory.BeanCreationException: Error creating ...

  3. 【java】在分页查询结果中对最后的结果集List进行操作add()或remove()操作,报错:java.lang.UnsupportedOperationException

    场景: 在分页查询结果中对最后的结果集List进行操作add()或remove()操作,报错:java.lang.UnsupportedOperationException 错误: java.lang ...

  4. 遇到java.lang.OutOfMemoryError: Java heap space问题【持续跟踪中...】

    昨天下午app服务端无缘无故又502错了,我打开tomcat 日志: INFO: org.tuckey.web.filters.urlrewrite.UrlRewriteFilter DEBUG: i ...

  5. [Spring]:java.lang.NoSuchMethodError: 'java.lang.String javax.annotation.Resource.lookup()'

    错误信息 11月 05, 2019 9:32:15 下午 org.springframework.test.context.TestContextManager prepareTestInstance ...

  6. 【java】细说 JAVA中 标注 注解(annotation)

    Java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能.注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用 下面我们来详细说说这个注解,到底是怎么一 ...

  7. C#中的Attribute和Java中的Annotation

    在之前的博客中介绍过C#的Attribute(特性),简单的说,特性主要就是利用反射技术,在运行期获取关注类的相关标注信息,然后利用这些标注信息对关注的类进行处理,最近因为工作的原因,需要看一下Jav ...

  8. java.lang.ClassCastException: java.util.HashMap cannot be cast to java.lang.String

    问题背景:从前端传来的json字符串中取某些值,拼接成json格式入参调外部接口. 报如下错: java.lang.ClassCastException: java.util.HashMap cann ...

  9. 一起来看一下Java中的Annotation注解

    目录: 一. 什么是Annotation 二. Annotation的作用 2.1 编译器使用到的注解 2.2 .class文件使用到的注解 2.3 运行期读取的注解 三. 定义Annotation ...

随机推荐

  1. shapefile文件

    基本信息编辑 ESRI公司的Shapefile文件是描述空间数据的几何和属性特征的非拓扑实体矢量数据结构的一种格式. 内容编辑 一个Shapefile文件最少包括三个文件: 主文件(*.shp).-- ...

  2. 【NHibernate】HQL入门

    在NHibernate 中 HQL 可以帮我们转成最终依赖数据库的查询脚本: 语法也甚是强大,适配主流数据库, HQL不支持union,要想取多个表数据可以做两次单独查询. IQuery query ...

  3. Android模拟神器Genymotion eclipse插件安装问题出解决

    我之前一直是打开eclipse之前直接运行Genymotion模拟器就可以连接到adb了,非常方便,但最近突然想来装个eclipse的Genymotion插件玩玩,安装时居然出错了,于是不折腾好心里不 ...

  4. Technical diagrams for SharePoint 2013

    sharepoint2013技术图表 http://technet.microsoft.com/zh-cn/library/cc263199.aspx SharePoint 2013 的可下载内容 h ...

  5. Hadoop-2.2.0 + Hbase-0.96.2 + Hive-0.13.1(转)

    From:http://www.itnose.net/detail/6065872.html # 需要软件 Hadoop-2.2.0(目前Apache官网最新的Stable版本) Hbase-0.96 ...

  6. crontab定时任务中文乱码问题

    手动执行都很正常的的脚本,添加到定时任务中日志文件全是乱码经过多方查证终于找到了原因! crontab启动的任务没有获取系统的环境变量,导致中文乱码解决办法:   在执行的脚步中添加编码方式或者添加对 ...

  7. UITextField监听文字输入事件

    [textField addTarget:self action:@selector(textFieldDidChange:)forControlEvents:UIControlEventEditin ...

  8. 解决mysql中表字符集gbk,列字符集Latin1,python查询乱码问题

    最近在公司碰到一个异常蛋疼的情况,mysql数据库中,数据库和表的字符集都是'gbk',但是列的字符集却是'latin1',于是蛋疼的事情出现了. 无论我连接字符串的`charset`设置为`gbk` ...

  9. 开扒本地存储—localStorage

    .localStorage是什么狂点查看demo localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期 的. 2.localStorage有哪些优点 1). 存储空间 ...

  10. [js综合问题汇总]js窗口关闭事件,表单名称,父窗口子窗口,var变量名

    <script type="text/javascript"> window.onbeforeunload = onbeforeunload_handler; //wi ...