`

Java Annotation注释语法

    博客分类:
  • java
阅读更多
JAVA从J2SE5开始提供名为annotation(注释,标注)的功能。Java的annotation,可以附加在package, class, method, field等上面,相当于给它们添加了额外的辅助信息。附加在package, class, method, field等上的Annotation,如果没有外部解析工具等对其加以解析和处理的情况,本身不会对Java的源代码或class等产生任何影响,也不会对它们的执行产生任何影响。

但借助外部工具,比如javac,EJB容器等,可以对附加在package, class, method, field的annotation进行解析,可以根据annotation而做出相应的处理,比如运行时改变对象/方法的行为。


Java标准Annotation
@Deprecated 相当于Javadoc的@deprecated,被@Deprecated标注的对象class, method等被注明为不推荐使用。主要用于javac等编译工具。
@Override 注明对象method重载了父类的方法。javac等编译工具编译时会根据此Annotation判断重载方法是否正确。
@SuppressWarnings 告诉javac等编译器忽略所指定的特定的警告信息。
@Target 被定义的annotation可以附加在那些对象上。
@Retention annotation的作用期间。


Java标准Annotation的使用
@Deprecated:
@Deprecated
public class TestBean {
    …
}

@SuppressWarnings
@SuppressWarnings("serial")
public class TestBean implements java.io.Serializable {
    …
}

@SuppressWarnings(value = {"serial", "unchecked"})
public String doSth() {
    …
}


@Override
@Override
public String doSth() {
    …
}


Annotation的定义
定义方法:
@interface Annotation名 {定义体}

定义例1:
public @interface MyAnnotation {}
该例定义了一个无任何属性/方法的Annotation。

定义例2:
public @interface MyAnnotation {
    public String value();
}
该例定义了只有一个方法为value()的Annotation。一般来说,只有一个方法的Annotation,方法名一定定义为value。

定义例3:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
    public String value();
    public String [] multiValues();
    int number() default 0;
    
}
该例定义了一个具有多方法的Annotation。并设置其中一个方法number的默认值为0。multiValues 方法定义为数组类型。Annotation定义可以用MetaAnnotation(元注释)修饰。MetaAnnotation有以下2个:
@Retention
@Target

我们将在以下对@Retention与@Target加以说明。


@Retention
@Retention 可以设置为RetentionPolicy类型的值。
例:
@Retention(RetentionPolicy.RUNTIME)

RetentionPolicy的值 说明
RetentionPolicy.CLASS annotation信息将被编译器编译时保存在class文件中,但执行时不会在VM装载。也就是说不能在执行时动态取得annotation信息。未设置@Retention时这将是默认设置值。
RetentionPolicy.RUNTIME annotation信息将被编译器编译时保存在class文件中,执行时也会被VM装载。
RetentionPolicy.SOURCE annotation信息将被编译器编译时舍弃掉。


@Target
@Target表明Annotation可以附加在哪种JAVA元素之上,可以设置为java.lang.annotation.ElementType数组类型的值。
使用例1:
@Target(ElementType.METHOD)

使用例2:
@Target(value={ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.LOCAL_VARIABLE, ElementType.METHOD})

ElementType是一个枚举类型,它具有以下定义:
ElementType值 说明
ElementType.ANNOTATION_TYPE 应用于其他注解的元注解
ElementType.CONSTRUCTOR 构造函数
ElementType.FIELD 字段
ElementType.LOCAL_VARIABLE 方法中的本地变量
ElementType.METHOD 方法
ElementType.PACKAGE
ElementType.PARAMETER 方法的参数
ElementType.TYPE 类,接口或者枚举声明
分享到:
评论

相关推荐

    java或Java框架中常用的注解及其作用详解_资料.docx

    java或Java框架中常用的注解及其作用详解:Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过...

    graphql-java-annotations:Java的GraphQL注释

    该库为GraphQL模式定义提供了基于注释的语法。 如果您想使用使用graphql-java-annotations创建graphql spring引导服务器的工具,则可以查看库。 目录 入门 (Gradle语法) dependencies { compile " io.github....

    java高手真经 光盘源码

    java高手真经 全光盘源代码 打包rar 第1部分(2个程序包) HelloWorld.zip 01.Java入门样例HelloWorld demo.zip 03.Eclipse入门样例...javaannotation.zip 28.Java注释符编程 javafeature.zip 29.Java5.0语言新特性

    Java高手真经(编程基础卷)光盘全部源码 免积分

    看到那些要积分的很不酸,发布免费版本。 第1部分(2个程序包) HelloWorld.zip 01.Java入门样例HelloWorld demo.zip 03.Eclipse入门...javaannotation.zip 28.Java注释符编程 javafeature.zip 29.Java5.0语言新特性

    Java高手真经(编程基础卷)光盘全部源码

    看到很多人都分卷打包的,下载很是不方便,还浪费积分,我就整合压缩打包到一个包里面,里面包含全部源码 源码目录如下: ...javaannotation.zip 28.Java注释符编程 javafeature.zip 29.Java5.0语言新特性

    JAVA上百实例源码以及开源项目

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    \java超强笔记(超级经典)

    四种元注释:java.lang.annotation中的类 元注释:注释注释的注释,用来限定注释的特征 @Terget 用来限定某个注释的使用范围,可以对什么元素进行注释 @Retention 用来描述注释的有效范围 @Inherited ...

    java高级特性,涵盖了多种java常用的一些例子

    Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 Java 语言中的类、方法、变量、参数和包等都可以被标注。Java标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节...

    JAVA上百实例源码以及开源项目源代码

     Java绘制图片火焰效果,源代码相关注释:前景和背景Image对象、Applet和绘制火焰的效果的Image对象、Applet和绘制火焰的效果的Graphics对象、火焰效果的线程、Applet的高度,图片到图片装载器、绘制火焰效果的X坐标...

    疯狂JAVA讲义

    第1章 Java概述 1 1.1 Java语言的发展简史 2 1.2 Java的竞争对手及各自优势 4 1.2.1 C#简介和优势 4 1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6...

    Hibernate注释大全收藏

    Hibernate注释大全收藏 声明实体Bean @Entity public class Flight implements Serializable { Long id; @Id public Long getId() { return id; } public void setId(Long id) { this.id = id; } } @Entity ...

    AnnotationKit:使用Objective-C的注释实现

    注释是一种语法元数据的形式,可以添加到Objective-C源代码中,例如java注释。 0x01它能做什么? @when用于事件调度。 @When(AppLaunched,ViewController, @selector ( doLaunched: )) + ( void )doLaunched:( ...

    java8看不到源码-htl-examples:AEMHTL示例

    java8 看不到源码htl-例子 AEM 兼容性 该软件包仅与 AEM6.4 SP2 及更高版本兼容。 它使用 OSGi r7 注释和 HTL 1.4 语法。 使用aem核心组件: aem acs 通讯: 包含的例子 OSGi r7 注释的使用示例 HTL 1.4 语法的一些...

    管理系统javasal源码-storage:存储相关的一些代码

    管理系统java sal源码 storage 本库说明: 本库主要包含存储相关的内容, 如:磁盘,卷,目录,文件,流,硬链接,符号连接,挂载点,分页文件,稀疏文件,压缩,版本,哈希,签名,权限,元数据等。 特别注释: 1....

    jDialects:jDialects是一种数据库方言工具(注意

    从Annotation创建DDL:提供对一些主要的JPA注解的支持从Java方法创建DDL:提供Java方法配置来创建DDL,同样的语法也可以在运行期修改配置。从数据库生成实体类源码:可以读取数据库结构,生成注解风格的实体类POJO或...

    play框架手册

    But you can define some interceptors in a totally different class, and link them with any controller using the @With annotation.由于java不允许多继承,通过控制器继承特点来应用拦截器就受到极大的限制。...

    play framework 框架手册 word 版

    But you can define some interceptors in a totally different class, and link them with any controller using the @With annotation.由于java不允许多继承,通过控制器继承特点来应用拦截器就受到极大的限制。...

Global site tag (gtag.js) - Google Analytics