您的位置:首页 > 编程语言 > Java开发

java之注解开发应用

2017-01-05 09:40 363 查看

一. 注解概念知识

注解(Annotation)
,也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释,这些信息被保存在Annotation的”name=value”对中。

二. 基本的Annotation

使用Annotation时要在其前面加上
@
符号,并把该Annotation当成一个修饰符使用,用于修饰它支持的程序元素。

三个基本的Annotation:

@Override:限定重写父类方法,该注释只能用于方法

@Deprecated:用于表示某个程序元素(类,方法等)已过时

@SupperessWarnings: 抑制编译器警告

三. 元注解

JDK的元注解是用来修饰其他Annotation定义。

JDK1.5提供了专门在注解上的注解类型,分别为以下四种:

@Retention

@Target

@Documented

@Inherited

分别来说明以下:

@Retention
,只能用于修饰一个Annotation定义,用于指定该Annotation可以保留多长时间,@Retention包含了一个RetentionPolicy类型的成员变量,使用@Rentention时必须为该value成员变量指定值:

RetentionPolicy.SOURCE: 编译器直接丢弃这种策略的注释

RetentionPolicy.ClASS: 编译器将把注释记录在class文件中,当运行java程序时,JVM不会保留注解,这是默认值。

RetentionPolicy.RUNTIME: 编译器将把注释记录在class文件中,当运行java程序时,JVM会保留注释,程序可以通过反射获取该注释

@Target
,用于修饰Annotation定义,用于指定被修饰的Annotation能用于修饰哪些程序元素。@Target也包含一个名为Value的成员变量。@Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。

取值(ElementType)有:

1.CONSTRUCTOR:用于描述构造器

2.FIELD:用于描述域

3.LOCAL_VARIABLE:用于描述局部变量

4.METHOD:用于描述方法

5.PACKAGE:用于描述包

6.PARAMETER:用于描述参数

7.TYPE:用于描述类、接口(包括注解类型) 或enum声明

@Documented
,用于指定被该元Annotation修饰的Annotation类将被javadoc工具提取成文档。定义为Documented的注解必须设置Retention值为RUNTIME。

@Inherited
,被它修饰的Annotation将具有继承性,如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解(实际应用中,使用较少)。

四. 自定义注解

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

定义注解格式:

public @interface 注解名{定义体}

实例代码:

@Target(ElementType.FIELD)//作用范围在属性上
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation {
public enum WeekDay{SUN,MON,TUE,WED,THU,FRI,SAT};
WeekDay wd() default WeekDay.SUN;
public int id() default -1;
public String name() default "";
}


自定义注释的使用:

@MyAnnotation(wd = WeekDay.MON)
public int age;


注解元素默认值:

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

如果在定义注解中没有指定默认值,或者在使用时,没有指定值,会报以下错误:



关于注解的更过知识,请查看博客:http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html

博主写的狠详细,也很好,采摘了博主部分内容,望博主见谅,也帮他宣传下,知识共享。。。

上面博主的一张脑图,很好,分享一下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java