Java注解

1、注解

java中的注解(Annotation),也叫元数据。是Java5以后版本引入的一个特性。

注解与类、接口、枚举是在同一个层次,可以用来标注包、类、字段、方法、局部变量、方法参数等元素,达到对这些元素的描述和说明

注解是可以允许jvm在运行中读取它,这一点与注释完全不同。并且包含多种加载策略,可以灵活配置。

常见的注解:

@Override

它用来对覆盖父类方法、实现接口方法进行标记,如果被标记的方法并没有实际覆盖父类方法,则编译器会发出错误警告。

@Deprecated

它用来标记过期方法、不推荐使用方法。对于某些已经过期、不推荐使用的方法,但又不能直接删除(有其他地方仍使用),我们会使用@Deprecated进行标记,当使用这些方法时,会在编译时进行提示。

@SuppressWarnings

它用来标记不想被提示的警告,警告类型可以通过参数控制,具体如下:

deprecation,使用了过时的类或方法时的警告

unchecked,执行了未检查的转换时的警告

fallthrough,当Switch程序块直接通往下一种情况而没有Break时的警告

path,在类路径、源文件路径等中有不存在的路径时的警告

serial,当在可序列化的类上缺少serialVersionUID定义时的警告

finally,任何finally子句不能正常完成时的警告

all,关于以上所有情况的警告

-------------------------------------------------------------------------------------------------------

自定义注解:

语法:public @interface 注解名 {定义体} default {默认值}

使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。

@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型。通过default来声明参数的默认值,如果不指定default,则说明该参数为必填。

注解参数(注解方法的返回值)的只能用public或默认(default)这两个访问权修饰,并且只支持以下数据类型:

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

String类型

Class类型

enum类型

Annotation类型

以上所有类型的数组

一般是用反射来获取注解。例:

注解类:

@Retention(RetentionPolicy.RUNTIME)

public @interfaceTestAnnotation {

    String name() default "";

}

被注解的类:

public classTestInfo {

    @TestAnnotation(name = "公司名称")

    private String company;

 

    @TestAnnotation(name = "职位")

    private String position;

}

使用注解:

public classTestMain {

    public static void main(String[] args) {

        Field[] fields =TestInfo.class.getDeclaredFields();

        for (Field field : fields) {

            if(field.isAnnotationPresent(TestAnnotation.class)) {

                TestAnnotation testAnnotation =(TestAnnotation) field.getAnnotation(TestAnnotation.class);

               System.out.println("field:" + field.getName() + ",annotation:" + testAnnotation.name());

            }

        }

    }

}

field:company,annotation:公司名称

field:position,annotation:职位

其中注解类中的注解@Retention(RetentionPolicy.RUNTIME),是用来修饰注解的注解,即元注解,用来描述和限定自定义注解的使用场景和约束。

-------------------------------------------------------------------------------------------------------

元注解就是负责注解其他注解

Java 5定义了4个标准的元注解(meta-annotation):@Target、@Retention、@Documented、@Inherited,这些元注解的类在java.lang.annotation包中,具体如下:

@Target

@Target说明了注解所修饰的对象范围,即所定义的注解可以用在什么地方。具体的取值有:

CONSTRUCTOR   用于描述构造器

FIELD   用于描述类中的属性(域)

LOCAL_VARIABLE   用于描述局部变量

METHOD   用于描述方法

PACKAGE   用于描述包

PARAMETER   用于描述方法参数

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

@Retention

@Retention定义了注解如何被保留,即被描述的注解在什么范围内有效。具体的取值有:

SOURCE  在源文件中有效(即源文件保留)  

CLASS   在class文件中有效(即class保留)

RUNTIME   在运行时有效(即运行时保留)

我们在《如何自定义注解》文章中的实例中使用了@Retention(RetentionPolicy.RUNTIME),也就是说该自定义注解在运行时能够被读取和使用。

@Documented

@Documented定义了注解可以作为公共API,可以被例如javadoc此类的工具文档化。Documented是一个标记注解,并没有任何成员。

@Inherited

@Inherited允许子类继承父类的注解。即一个使用了@Inherited修饰的注解被用于某个类,则该类的子类也等同于被该注解修饰。


参考:http://blog.csdn.net/ooppookid

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值