我们用过JDK给我们提供的 @Override @Deprecated @SuppressWarning 注解 ,这些注解是JDK给我们提供的,我们只是在用别人写好的东西,那么我们是否可以自己写注解呢?当然是可以的。

我们写的注解包括三个环节:

1、 注解的声明,也就是注解类的定义。

形式如下 @interface 来进行注解的声明。

  1. package me.test;

  2. import java.lang.annotation.* ;//导入注解包中所有注解

  3. @Retention(RetentionPolicy.RUNTIME)   //解释如下

  4. @Target(ElementType.TYPE)//解释如下

  5. public @interface MyAnnotation

  6. {

  7. }

  8. @Retention(RetentionPolicy.RUNTIME)

指定了注解保留的周期,注解的生命周期有是三个,RetentionPolicy 枚举的三个值代表了三个声明周期,默认是CLASS。

枚举常量摘要CLASS
          编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。RUNTIME
          编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。SOURCE
          编译器要丢弃的注释。

@Target(ElementType.TYPE)

这个标识注解应该标在那里ElementType的几个枚举值就代表了,注解应该写在的位置。

CONSTRUCTOR
          构造方法声明FIELD
          字段声明(包括枚举常量)LOCAL_VARIABLE
          局部变量声明METHOD
          方法声明PACKAGE
          包声明PARAMETER
          参数声明TYPE
          类、接口(包括注释类型)或枚举声明

2、 使用了注解的类或者方法。

  1. @MyAnnotation

  2. class  A

  3. {

  4. }

3、 利用反射来操作注解,详细见代码。

Class类有一个方法:

<A extends Annotation> 
A   getAnnotation(Class<A> annotationClass)

这个方法接受一个注解的字节码参数 ,然后返回这个类所标识的注解对象 ,因为我们标识了一个注解就相当于产生了一个注解对象 。

booleanisAnnotationPresent(Class<? extends Annotation> annotationClass)

这个方法判断一个类是否被注解所标识。

下面是代码示例:

MyAnnotationTest.java中

  1. package me.test;

  2. import java.lang.annotation.Annotation;

  3. @MyAnnotation

  4. public class MyAnnotationTest

  5. {

  6. public static void main(String []args)

  7. {

  8. if(MyAnnotationTest.class.isAnnotationPresent( MyAnnotation.class))

  9. {

  10. MyAnnotation an=(MyAnnotation)MyAnnotationTest.class.getAnnotation(MyAnnotation.class) ;

  11. System.out.println(an.toString());

  12. }

  13. }

  14. }

MyAnnotation.java中

  1. package me.test;

  2. import java.lang.annotation.ElementType;

  3. import java.lang.annotation.Retention;

  4. import java.lang.annotation.RetentionPolicy;

  5. import java.lang.annotation.Target;

  6. @Retention(RetentionPolicy.RUNTIME)

  7. @Target(ElementType.TYPE)

  8. public @interface MyAnnotation

  9. {

  10. }

在Java中设计和使用自己的注解(转载)相关推荐

  1. Java 8 新特性:扩展注解(类型注解和重复注解)

    转载自  Java 8 新特性:扩展注解(类型注解和重复注解) (注:先回顾下JDK1.5版本出现的注解 ,然后再解释JDK 8的注解 更新内容.) 一.注解(JDK1.5) 1.注解(@): 注解就 ...

  2. Java笔记(二十) 注解

    注解 一.内置注解 Java内置了一些常用注解: 1.@Override 该注解修饰一个方法,表示当前类重写了父类的该方法. 2.@Deprecated  该注解可以修饰类.方法.字段.参数等.表示对 ...

  3. 用java里的junit框架_使用Java JUnit框架里的@SuiteClasses注解管理测试用例

    使用Java JUnit框架里的@SuiteClasses注解管理测试用例 发布时间:2020-08-13 13:43:08 来源:ITPUB博客 阅读:96 作者:i042416 Suppose y ...

  4. Java基础13:反射与注解详解

    Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ...

  5. java interface作用是什么_Java注解总结:史上最全,有这一篇就够了

    什么是注解? 注解的定义 官网描述如下: Java 注解用于为 Java 代码提供元数据.作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的.Java 注解是从 Jav ...

  6. java中的装饰模式讲解,java 中设计模式(装饰设计模式)的实例详解

    搜索热词 java 中设计模式(装饰设计模式)的实例详解 应用场景: 在不对原有对象类进行修改的基础上,给一个或多个已有的类对象提供增强额外的功能. 我觉得可以从字面理解,装饰,装饰房子.房子可以看成 ...

  7. Java中12 种 Spring 常用注解,必须记住!

    1.声明bean的注解 @Component 组件,没有明确的角色 @Service 在业务逻辑层使用(service层) @Repository 在数据访问层使用(dao层) @Controller ...

  8. Java中如何创建自定义的注解学习笔记(MD版)

    概要 Java中如何创建自定义的注解学习笔记(MD版). 博客 博客地址:IT老兵驿站. 前言 记得这篇笔记还是在泉州的龙玲酒店记录的,是一个周六的晚上,坐飞机从上海到泉州,从笔记中能勾起一些旅游的回 ...

  9. Java 8系列之重新认识HashMap(转载自美团点评技术团队)

    Java 8系列之重新认识HashMap(转载自美团点评技术团队) 摘要 HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型.随着JDK(Java Developmet Ki ...

最新文章

  1. 论云计算对传统软件工程的影响
  2. java执行时的两个常见问题(无法加载主类)
  3. 判断一个窗口是否有焦点_判断一个项目是否值得加盟的基本方法
  4. Dockerfile中通过ENV指定动态参数在RUN时传递参数(部署后台jar包时指定端口为例)
  5. oracle 驱动表提示错误代码,oracle驱动表以及如何确定驱动表
  6. SqlServer中dateTime、dateTime2、date、datetimeoffset的区别
  7. netty实现简单时事通讯_简单的Java实现Netty进行通信
  8. Bootstrap研究1-精巧的网格布局系统
  9. 原来“事务0丢失”是这样做到的
  10. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(12) - 预取指令与SFENCE指令
  11. 非对称加密算法RSA
  12. FFmpeg学习(0)——使用ffmpeg视频切片并加密
  13. linux显示指定目录容量,linux 查看指定目录的容量大小,系统目录容量大小
  14. 基于linux的贪吃蛇游戏设计_基于Unreal4的战棋类游戏《棋行傀儡》的设计与实现...
  15. 超详细教程解决Win10计划任务定时重启jar服务
  16. 计算机考研网络复试总结
  17. mtk刷机报错4032专业维修教程(图文)
  18. VHDL:设计一个四位并行加法器和16位ALU(代码思路清晰易懂)
  19. ORA-20011(外部表收集统计信息异常报错)
  20. 频繁gc是什么意思_linux查看是否频繁gc

热门文章

  1. 将所有单个json标注文件合并成一个总的json标注文件(COCO数据集格式)
  2. Python---json模块
  3. Consecutive Sum Riddle(800)
  4. k中心点聚类算法伪代码_聚类算法之——K-Means、Canopy、Mini Batch K-Means
  5. 史上最详细Docker安装Elasticsearch、ik分词器、可视化工具,每一步都带有步骤图!!!
  6. 虚拟机(VMware Workstation Pro)安装多台Linux
  7. matlab上机实验报告,MATLAB上机实验
  8. qemu模拟imx6用户态环境
  9. windows 下执行mysql脚本_Windows下批处理执行MySQL脚本文件
  10. 电脑硬件知识学习_编程入门书籍:大学学习计算机基础必读 5 本经典入门书籍,收藏...