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

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

1、 注解的声明 ,也就是注解类的定义     形式如下        @interface 来进行注解的声明

package me.test;

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

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

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

public @interface MyAnnotation              
{

}

@Retention(RetentionPolicy.RUNTIME)

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

枚举常量摘要

CLASS
          编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。

RUNTIME
          编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。

SOURCE
          编译器要丢弃的注释。

@Target(ElementType.TYPE)

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

CONSTRUCTOR
          构造方法声明

FIELD
          字段声明(包括枚举常量)

LOCAL_VARIABLE
          局部变量声明

METHOD
          方法声明

PACKAGE
          包声明

PARAMETER
          参数声明

TYPE
          类、接口(包括注释类型)或枚举声明

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

@MyAnnotation

class  A

{
}

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

Class类有一个 方法

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

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

booleanisAnnotationPresent(Class<? extends Annotation> annotationClass)

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

下面是代码示例

MyAnnotationTest.java中

package me.test;
import java.lang.annotation.Annotation;
@MyAnnotation 
public class MyAnnotationTest 
{

public static void main(String []args)
    {
     if(MyAnnotationTest.class.isAnnotationPresent( MyAnnotation.class))
     { 
       MyAnnotation an=(MyAnnotation)MyAnnotationTest.class.getAnnotation(MyAnnotation.class) ;
       System.out.println(an.toString()); 
     }
    }
}

MyAnnotation.java中

package me.test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnnotation 
{

}

@深入注解,在Java中设计和使用自己的注解的更多相关文章

  1. 了解注解及java提供的几个基本注解

    先通过@SuppreessWarnings的应用让大家直观地了解注解: 通过System.runFinalizersOnExit(true);的编译器警告引出           @SuppressW ...

  2. 我对java的理解(一)——注解就是贴标签

    在现实生活中,贴标签这种现象比比皆是.去超市,去商场,每个或者每类物品都会有它的标签,甚至在我们自己身上也会有标签,比如,程序猿.逗逼.单身狗.80/90后.屌丝……呵呵,太多了.有时候,我们也会戏谑 ...

  3. Java开发之@PostConstruct和@PreConstruct注解

    从Java EE5规范开始,Servlet增加了两个影响Servlet生命周期的注解(Annotation):@PostConstruct和@PreConstruct.这两个注解被用来修饰一个非静态的 ...

  4. Java Android 注解(Annotation) 及几个常用开源项目注解原理简析

    不少开源库(ButterKnife.Retrofit.ActiveAndroid等等)都用到了注解的方式来简化代码提高开发效率. 本文简单介绍下 Annotation 示例.概念及作用.分类.自定义. ...

  5. Java编程思想学习(十五) 注解

    注解Annotation又叫元数据,是JDK5中引入的一种以通用格式为程序提供配置信息的方式.使用注解Annotation可以使元数据写在程序源码中,使得代码看起来简洁,同时编译器也提供了对注解Ann ...

  6. 160919、使用AOP与注解记录Java日志

    有些时候,我想要把每个运行过的方法接收到的参数.返回值和执行时间等信息记录(通过slf4j 和 log4j)下来.在AspectJ.jcabi-aspects和Java注解的帮助下我实现了这个想法. ...

  7. [Effective Java]第六章 枚举和注解

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  8. Java中三种常见的注释(注解) Annotation

    Java为我们提供了三种Annotation方便我们开发. 1 Override-函数覆写注解 如果我们想覆写Object的toString()方法,请看下面的代码: class Annotation ...

  9. Java编程之反射中的注解详解

    "注解"这个词,可谓是在Java编程中出镜率比较高,而且也是一个老生常谈的话题.我们之前在聊Spring相关的东西时,注解是无处不在,之前我们简单的聊过一些"注解&quo ...

随机推荐

  1. NodeJS + Socket.io聊天服务器连接数达到1024后就连不上了

    如果是亚马逊的Engine Yard服务器,解决办法为: 1.查看端口占用情况,找到nodejs进程号,例如我这里是8000端口 lsof -i:8000  找到pid 例如为 8213 2.设置no ...

  2. CentOS 安装jdk1.7 64位

    [root@localhost ~]# java -versionjava version "1.6.0"OpenJDK Runtime Environment (build 1. ...

  3. linux笔记1

    在root下创建用户 1.useradd  abc  //添加一个新用户 2. cat  /etc/passwd   //查看新用户是否存在 3.passwd    abc 输入密码 (123456) ...

  4. SqlServer中创建Oracle连接服务器

    转自太祖元年的:http://www.cnblogs.com/jirglt/archive/2012/06/10/2544025.html参考:http://down.51cto.com/data/9 ...

  5. Virtual Box中 CentOS双网卡设置

    Virtual Box中 CentOS双网卡设置:   在Virtual Box中安装CentOS x86-64 6.4(final),配置了双网卡,eth0 为桥接模式 , eth1为内网模式   ...

  6. linux 输入子系统(1)----系统概述

    输入设备的工作中,只是中断.读键值/坐标值是设备相关的,而输入事件的缓冲区管理以及字符设备驱动的file_operations接口则对输入设备是通用的,基于此,内核设计了input输入子系统,由核心层 ...

  7. bnuoj 4225 杨辉三角形(规律)

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=4225 [题意]: 给定任意杨辉三角的行数n,请输出杨辉三角中前n行中总共有多少偶数. [题解]: 找 ...

  8. bnuoj 1071 拼图++(BFS+康拓展开)

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=1071 [题意]:经过四个点的顺逆时针旋转,得到最终拼图 [题解]:康拓展开+BFS,注意先预处理,得 ...

  9. mysql建表且某字段内不允许出现重复值

    CREATE TABLE `admin` ( `id` ) NOT NULL AUTO_INCREMENT , `username` varchar() NOT NULL , `password` v ...

  10. Java 程序检查远程服务器状态

    通常我们以命令的方式判断远程服务器是否正常运行有两种方式,ping 或 telnet 一个远程端口.假设我们要检查的远程服务器都是 Linux 系统. 从 JDK 1.5 以后, InetAddres ...