Java注解总结

来源:互联网 发布:单片机最小系统是什么 编辑:程序博客网 时间:2024/05/18 17:42

什么是注解?

注解在Java SE5中被引入,可以提供用来描述程序所需要的信息,而这些信息可能是无法或很难用Java来表达的。即注解使我们能够以  将由编译期来测试和验证  的格式,存储有关程序的额外信息。

注解有什么用?

1.      注解是在实际的源代码级别保存所有的信息,享有编译期的类型检查保护

2.      如override注解,可以告诉编译期如何运行程序

3.      通过使用注解,我们可以将一些Java很难表达的信息保存在Java源代码中,并可以利用annotation API创建注解处理器,从而简化(或取代)配置文件。

JavaSE5内置了三种注解

// 重写父类的方法@Overridepublic String toString() {return super.toString();}// 抑制编译器警告//未使用不报错  unused//List非泛型不报错 unchecked@SuppressWarnings({"unused","unchecked"})private void save() {List list = null;}// 标记方法过时@Deprecatedprivate void save1() {}

创建自定义注解

注解将会编译成class文件

第一步:写元注解:

元注解:用来修饰注解的  注解

指定注解的可用范围:

ElementType枚举

@Target({

TYPE,     类声明

FIELD,     字段

METHOD,  方法

PARAMETER,   参数

CONSTRUCTOR, 构造器

LOCAL_VARIABLE  局部变量

PACKAGE  包声明

})

 

 

指定注解的声明周期

@Retention(RetentionPolicy.SOURCE)    注解只在源码级别有效,将被编译期丢弃

@Retention(RetentionPolicy.CLASS)      注解在字节码级别(class文件中)有效,但会被JVM丢弃 默认值

@Retention(RetentionPolicy.RUNTIME)   注解在运行期也保留,因此可以通过反射机制读取注解的信息

 

第二步:定义注解

注解属性要求

         1.修饰为默认或public

         2.不能有主体

         3.要求元素不能有不确定的值,即元素要么具有默认值,要么在使用注解时提供元素

public @interface Author {/** * 注解属性 * 1. 修饰为默认或public * 2. 不能有主体 */String name();int age() default 30;   // 3.带默认值的注解;  使用的时候就可以不写此属性值}

注解属性类型为数组:

public @interface MySuppressWarning {String[] value() default {"unused ","unchecked"};}//使用:@Author({"",""})public void save() {}

创建注解处理器 使用注解

注解相关的API

包名:java.lang.reflect

接口 AnnotatedElement

已知实现类:

         Class,Constructor, Field, Method,

<T extends Annotation>
T

getAnnotation(Class<T> annotationClass)
          如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null。

Class类,Method类,Field类都实现了这个接口,实现了这个方法。getAnnotation()方法返回指定类型的注解对象。如果没有对应的注解,则返回null。这样就可以获得注解值从而加以使用。

使用注解的一个例子:使用注解反射实现BaseDao




0 0
原创粉丝点击