Java 从1.5开始提供了 Annotation (注释,标注),它用来修饰应用程序的元素(类,方法,属性,参数,本地变量,包、元数据),编译器将其与元数据一同存储在 class 文件中,运行期间通过 Java 的反射来处理对其修饰元素的访问。Annotation 仅仅用来修饰元素,而不能影响代码的执行。只有通过其配套的框架或工具才能对其信息进行访问和处理。
Q:如何使用 Annotation ?
A:首先让我们从 Java 定义的 Annotation 开始。@Override 可能是我们最常用到的 Annotation 之一了,Eclipse 中当子类中的某个方法覆写的父类中的方法时,会亮黄灯提示。若用 @Override 修饰该方法,黄灯熄灭。再让我们来看一个例子,当我们使用 new java.util.Date(2010, 2, 25); 来初始化日期类时,Eclipse 仍然会亮黄灯提示,这是因为该方法被 @Deprecated 修饰了,表示不推荐使用。从这两个例子我们能够了解到,Annotation 是在编译期校验的。这一点最大的好处是在编译期间就可对错误进行处理。若使用 xml 的话,只有在运行期才能得到错误信息。
Q:Java 标准的 Annotation 有哪些?
A:@Deprecated 相当于Javadoc的@deprecated,被@Deprecated标注的对象class, method等被注明为不推荐使用。主要用于javac等编译工具。
@Override 注明对象method重载了父类的方法。javac等编译工具编译时会根据此Annotation判断重载方法是否正确。
@SuppressWarnings 告诉javac等编译器忽略所指定的特定的警告信息。
@Target 被定义的annotation可以附加在那些对象上。
@Retention annotation的作用期间。
这里我们要重点介绍两个 Annotation ,因为这两个 Annotation 有一点特殊,因为它们并不是用来修饰代码,而是用来修饰 Annotation 的。
@Target 用来标注定义的 Annotation 可以附加在那些对象上。可选参数包括CONSTRUCTOR(构造器)、FIELD(属性及enum实例)LOCAL_VARIABLE(局部变量)、 METHOD(方法)、PACKAGE(包)、PARAMETER(参数)以及TYPE(类、接口、注解类型、enum)。下例定义的 Annotation 被 @Target 修饰,表示该 Annotation 可以用来修饰属性和参数。
-
@Target( { FIELD, PARAMETER})
-
public @interface Resource {
-
public String id() default "";
- }
使用方法:
-
public class Mxjava {
-
@Resource(id="http://www.mxjava.com")
-
private String url;
-
public void getLog(@Resource(id="001") String logId) {...}
- }
@Retention 用标注在什么级别保存该 Annotation 。可选参数包括SOURCE(编译期会被忽略不做保存)、CLASS(编译后的 class 文件中可用,但虚拟机运行时忽略)、RUNTIME(运行期保留,若要使用反射机制读取 Annotation 信息的话,使用该项。)
-
@Target( { FIELD, PARAMETER})
-
@Retention(RUNTIME)
-
public @interface Resource {
-
public String id() default "";
- }
Q:如何定义 Annotation ?
A:先让我们来看一个最简单的 Annotation 。
-
@Target( { FIELD })
-
@Retention(RUNTIME)
-
public @interface Resource {
-
public String id() default "";
- }
@Target 是 Java 标准的 Annotation,本例中指定定义的 Annotation 可以附加在属性(Field)上。@Retention 也是 Java 标准的 Annotation,指定作用期间是运行期。@interface 是用来修饰 Annotation 的,请注意,它不是 interface。这个关键字声明隐含了一个信息:它是继承了 java.lang.annotation.Annotation 接口,而不是声明了一个 interface。Annotation 成员的定义看上去很象方法,default “” 表示默认值为空字符串。使用方法如下:
-
public class mxjava {
-
@Resource(id="http://www.mxjava.com")
-
private String url;
- }
若没有配套的框架和工具,@Resource 是不起任何作用的。就象前面讲到的那样,它不会对代码的执行有任何影响。
Q:什么时候需要自定义 Annotation ?
A:一般来说,若不做框架和工具的开发,一般情况下是不需要自定义 Annotation 的。
分享到:
相关推荐
Java基础之Annotation解读.docx
Java基础复习笔记12Java自定义注解Annotation的使用
以下是JAVA annotation入门基础,新手朋友们可以过来参考下。希望对你有所帮助
学习java自定义注解的小例子,处理运行时注解方法,可以结合博客学习,博客地址: http://blog.csdn.net/liuyonglei1314/article/details/59494503
NULL 博文链接:https://mypyg.iteye.com/blog/849176
计算机后端-Java-Java核心基础-第23章 枚举类与注解 11. Annotation的使用示例.avi
Core.Java基础教程 13.高级编程-反射、动态代理与Annotation
看到那些要积分的很不酸,发布免费版本。 第1部分(2个程序包) HelloWorld.zip 01.Java入门样例HelloWorld demo.zip 03.Eclipse入门...javaannotation.zip 28.Java注释符编程 javafeature.zip 29.Java5.0语言新特性
基础知识 元注解 所谓的元注解就是注解的注解。Java提供了4个元注解,分别是: @Target:用于描述注解的使用范围,如果自定义注解不存在@Target,则表示该注解可以使用在任何程序元素之上。接收参数ElementType,其...
学习Android必备的Java基础课件。内容包含基础语法,面向对象(重点),集合框架(重点),常用类库API,Java界面编程中的AWT,事件机制和Swing,Java高级编程(Annotation,多线程,阻塞和异步网络通信)。
看到很多人都分卷打包的,下载很是不方便,还浪费积分,我就整合压缩打包到一个包里面,里面包含全部源码 源码目录如下: ...javaannotation.zip 28.Java注释符编程 javafeature.zip 29.Java5.0语言新特性
文章目录1. 注解的分类2. 元注解3....通过使用注解,我们可以将这些元数据保存在Java源代码中,并利用 annotation API 为自己的注解构造处理工具,同时注解的优点还包括:更加干净易读的代码以及编译器类
java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java....
在本文中,我们将介绍注解的基础知识,包括注解是什么,它们如何在示例中使用,以及如何处理它们。下面和小编一起来学习吧
全书分为23章,包括需要重点掌握的环境搭建、简单Java程序、Java基础程序设计、数组与方法、面向对象程序设计(基础篇和高级篇)、异常的捕获及处理、包及访问控制权限、Java常用类库、JavaIO、Java类集、Java数据库...
主要介绍了Java基础教程之理解Annotation详细介绍的相关资料,需要的朋友可以参考下
java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机...
Java 核心技术 卷1 Index Chapter 1: An Introduction to Java 1 Java As a Programming Platform 2 The Java “White Paper” Buzzwords 2 Java Applets and the Internet 7 A Short History of Java 9 ...
jtsgen被实现为注释处理器,因此应该轻松地将其集成到当前的构建基础架构中。 因此,这里有一些突出的功能: 在编译时从带注释的Java类和接口中发出类型和文档 支持多种模块类型和输出变体 只读和名称空间支持 在...