博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Annotation(注解)
阅读量:4316 次
发布时间:2019-06-06

本文共 1811 字,大约阅读时间需要 6 分钟。

什么是Annotation(注解)?

  Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。从某些方面看,annotation就像修饰符一样被使用,并应用于包、类 型、构造方法、方法、成员变量、参数、本地变量的声明中。这些信息被存储在Annotation的“name=value”结构对中。

作用

 

a. 标记,用于告诉编译器一些信息

b. 编译时动态处理,如动态生成代码
c. 运行时动态处理,如得到注解信息

 

  Java注解可以用在构建期。当构建我们的工程时,构建进程会编译源码、生成xml文件,打包编译后的代码和文件到jar包。构建过程一般由构建工具自动完成,常用的构建工具有ant、maven。构建工具在构建时会自动扫描我们的代码,当遇到构建期注解时,会根据注解的内容生成源码或者其它文件。

 

注解的格式

 

a)一个java注解由一个@符后面跟一个字符串构成,例如:@name

 

b)java注解中一般包含一些元素,这些元素类似于属性或者参数,可以用来设置值,例如@Enity(name="jiang",age="20")

 

使用细节

 

  注解可以用于描述一个类、接口、方法、方法参数、字段、局部变量等。

 

 1.如果注解没有参数则不用写参数体

 

 2.如果只有一个参数比如named value,则参数名可以省略

 

 3.也可以同时使用多个注解来标示

 

 4.可以重复使用注解,不过只有在java SE 8 才支持

 

Java 常用注解

 

内置注解

 

  • @Override 表示当前方法覆盖了父类的方法,主要用在一个子类的方法中。
  • @Deprecated 表示方法已经过时,java不赞成使用这些被描述的对象方法上有横线,使用时会有警告
  • @SuppviseWarnings 表示关闭一些警告信息(通知java编译器忽略特定的编译警告,例如进行了一个不安转的类型转换)。

 

元注解:用来描述注解的注解

 

  • @Documented:告诉JavaDoc工具,当前注解本身也要显示在Java Doc中。

 

  • @Retention:用来定义当前注解的作用范围,有以下范围:

 

    • RetentionPolicy.SOURCE : 注解只存在于源码中,不会存在于.class文件中,在编译时会被忽略掉
    • RetentionPolicy.CLASS:注解只存在于.class文件中,在编译期有效,但是在运行期会被忽略掉,这也是默认范围
    • RetentionPolicy.RUNTIME:在运行期有效,JVM在运行期通过反射获得注解信息。

 

  • @Target:用于指定注解作用于java的哪些元素,未标注则表示可修饰所有。
  • @Inherited:表示当前注解会被注解类的子类继承。

 

自定义注解

 

  使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。可以通过default来声明参数的默认值。

 

       定义注解格式:

          public @interface 注解名 {定义体}

 

  注解参数的可支持数据类型:

 

    1.所有基本数据类型(int,float,boolean,byte,double,char,long,short)

    2.String类型
    3.Class类型
    4.enum类型
    5.Annotation类型
    6.以上所有类型的数组

 

       注解元素必须有确定的值,要么在定义注解的默认值中指定,要么在使用注解时指定,非基本类型的注解元素的值不可为null。因此, 使用空字符串或0作为默认值是一种常用的做法。这个约束使得处理器很难表现一个元素的存在或缺失的状态,因为每个注解的声明中,所有元素都存在,并且都具有相应的值,为了绕开这个约束,我们只能定义一些特殊的值,例如空字符串或者负数,一次表示某个元素不存在,在定义注解时,这已经成为一个习惯用法。

 

转载于:https://www.cnblogs.com/dashuaiB/p/10724597.html

你可能感兴趣的文章
MVC HtmlHelper用法大全
查看>>
SQL分布式查询、跨数据库查询
查看>>
python国内豆瓣源
查看>>
redux、immutablejs和mobx性能对比(三)
查看>>
jQuery实现简单而且很酷的返回顶部链接效果
查看>>
电梯调度程序的UI设计
查看>>
转自 zera php中extends和implements的区别
查看>>
Array.of使用实例
查看>>
【Luogu】P2498拯救小云公主(spfa)
查看>>
如何获取网站icon
查看>>
几种排序写法
查看>>
java 多线程的应用场景
查看>>
dell support
查看>>
转:Maven项目编译后classes文件中没有dao的xml文件以及没有resources中的配置文件的问题解决...
查看>>
MTK android 设置里 "关于手机" 信息参数修改
查看>>
单变量微积分笔记6——线性近似和二阶近似
查看>>
补几天前的读书笔记
查看>>
HDU 1829/POJ 2492 A Bug's Life
查看>>
CKplayer:视频推荐和分享插件设置
查看>>
CentOS系统将UTC时间修改为CST时间
查看>>