@深入注解,在Java中设计和使用自己的注解
我们用过 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中设计和使用自己的注解的更多相关文章
- 了解注解及java提供的几个基本注解
先通过@SuppreessWarnings的应用让大家直观地了解注解: 通过System.runFinalizersOnExit(true);的编译器警告引出 @SuppressW ...
- 我对java的理解(一)——注解就是贴标签
在现实生活中,贴标签这种现象比比皆是.去超市,去商场,每个或者每类物品都会有它的标签,甚至在我们自己身上也会有标签,比如,程序猿.逗逼.单身狗.80/90后.屌丝……呵呵,太多了.有时候,我们也会戏谑 ...
- Java开发之@PostConstruct和@PreConstruct注解
从Java EE5规范开始,Servlet增加了两个影响Servlet生命周期的注解(Annotation):@PostConstruct和@PreConstruct.这两个注解被用来修饰一个非静态的 ...
- Java Android 注解(Annotation) 及几个常用开源项目注解原理简析
不少开源库(ButterKnife.Retrofit.ActiveAndroid等等)都用到了注解的方式来简化代码提高开发效率. 本文简单介绍下 Annotation 示例.概念及作用.分类.自定义. ...
- Java编程思想学习(十五) 注解
注解Annotation又叫元数据,是JDK5中引入的一种以通用格式为程序提供配置信息的方式.使用注解Annotation可以使元数据写在程序源码中,使得代码看起来简洁,同时编译器也提供了对注解Ann ...
- 160919、使用AOP与注解记录Java日志
有些时候,我想要把每个运行过的方法接收到的参数.返回值和执行时间等信息记录(通过slf4j 和 log4j)下来.在AspectJ.jcabi-aspects和Java注解的帮助下我实现了这个想法. ...
- [Effective Java]第六章 枚举和注解
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Java中三种常见的注释(注解) Annotation
Java为我们提供了三种Annotation方便我们开发. 1 Override-函数覆写注解 如果我们想覆写Object的toString()方法,请看下面的代码: class Annotation ...
- Java编程之反射中的注解详解
"注解"这个词,可谓是在Java编程中出镜率比较高,而且也是一个老生常谈的话题.我们之前在聊Spring相关的东西时,注解是无处不在,之前我们简单的聊过一些"注解&quo ...
随机推荐
- NodeJS + Socket.io聊天服务器连接数达到1024后就连不上了
如果是亚马逊的Engine Yard服务器,解决办法为: 1.查看端口占用情况,找到nodejs进程号,例如我这里是8000端口 lsof -i:8000 找到pid 例如为 8213 2.设置no ...
- CentOS 安装jdk1.7 64位
[root@localhost ~]# java -versionjava version "1.6.0"OpenJDK Runtime Environment (build 1. ...
- linux笔记1
在root下创建用户 1.useradd abc //添加一个新用户 2. cat /etc/passwd //查看新用户是否存在 3.passwd abc 输入密码 (123456) ...
- SqlServer中创建Oracle连接服务器
转自太祖元年的:http://www.cnblogs.com/jirglt/archive/2012/06/10/2544025.html参考:http://down.51cto.com/data/9 ...
- Virtual Box中 CentOS双网卡设置
Virtual Box中 CentOS双网卡设置: 在Virtual Box中安装CentOS x86-64 6.4(final),配置了双网卡,eth0 为桥接模式 , eth1为内网模式 ...
- linux 输入子系统(1)----系统概述
输入设备的工作中,只是中断.读键值/坐标值是设备相关的,而输入事件的缓冲区管理以及字符设备驱动的file_operations接口则对输入设备是通用的,基于此,内核设计了input输入子系统,由核心层 ...
- bnuoj 4225 杨辉三角形(规律)
http://www.bnuoj.com/bnuoj/problem_show.php?pid=4225 [题意]: 给定任意杨辉三角的行数n,请输出杨辉三角中前n行中总共有多少偶数. [题解]: 找 ...
- bnuoj 1071 拼图++(BFS+康拓展开)
http://www.bnuoj.com/bnuoj/problem_show.php?pid=1071 [题意]:经过四个点的顺逆时针旋转,得到最终拼图 [题解]:康拓展开+BFS,注意先预处理,得 ...
- mysql建表且某字段内不允许出现重复值
CREATE TABLE `admin` ( `id` ) NOT NULL AUTO_INCREMENT , `username` varchar() NOT NULL , `password` v ...
- Java 程序检查远程服务器状态
通常我们以命令的方式判断远程服务器是否正常运行有两种方式,ping 或 telnet 一个远程端口.假设我们要检查的远程服务器都是 Linux 系统. 从 JDK 1.5 以后, InetAddres ...