鸿 网 互 联 www.68idc.cn

当前位置 : 主页 > 编程语言开发 > java > >

Java注解不完全总结

来源:互联网 作者:佚名 时间:2014-04-23 21:58
Java注解注解越来越多的在开源框架使用,spring、struts2、junit等等,离开注解技术,这些框架的易用性会大大降低。注解表面上很简单,容易被轻视,实际上要彻底

Java注解注解越来越多的在开源框架使用,spring、struts2、junit等等,离开注解技术,,这些框架的易用性会大大降低。

注解表面上很简单,容易被轻视,实际上要彻底搞清楚其中的规则并加以灵活运用,却很难!

因为要自己定义设计一些注解,这里做个查漏补缺,顺便总结下:


1、注解是针对Java编译器的说明。可以给Java包、类型(类、接口、枚举)、构造器、方法、域、参数和局部变量进行注解。Java编译器可以根据指令来解释注解和放弃注解,或者将注解放到编译后的生成的class文件中,运行时可用。


2、注解和注解类型

注解类型是一种特殊的接口类型,注解是注解注解类型的一个实例。

注解类型也有名称和成员,注解中包含的信息采用键值对形式,可以有0个或多个。


3、Java中定义的一些注解:

@Override 告诉编译器这个方法要覆盖一个超类方法,防止程序员覆盖出错。

@Deprecated 这个标识方法或类(接口等类型)过期,警告用户不建议使用。

@SafeVarargs JDK7新增,避免可变参数在使用泛型化时候警告”执行时期无法具体确认参数类型“,当然,也可以用@SuppressWarnings来避免检查,显然后者的抑制的范围更大。

@SuppressWarnings(value={"unchecked"}) 抑制编译警告,应用于类型、构造器、方法、域、参数以及局部变量。 value是类型数组,有效取值为:

   all, to suppress all warnings

   boxing, to suppress warnings relative to boxing/unboxing operations

   cast, to suppress warnings relative to cast operations

   dep-ann, to suppress warnings relative to deprecated annotation

   deprecation, to suppress warnings relative to deprecation

   fallthrough, to suppress warnings relative to missing breaks in switch statements

   finally, to suppress warnings relative to finally block that don't return

   hiding, to suppress warnings relative to locals that hide variable

   incomplete-switch, to suppress warnings relative to missing entries in a switch statement (enum case)

   javadoc, to suppress warnings relative to javadoc warnings

   nls, to suppress warnings relative to non-nls string literals

   null, to suppress warnings relative to null analysis

   rawtypes, to suppress warnings relative to usage of raw types

   restriction, to suppress warnings relative to usage of discouraged or forbidden references

   serial, to suppress warnings relative to missing serialVersionUID field for a serializable class

   static-access, to suppress warnings relative to incorrect static access

   static-method, to suppress warnings relative to methods that could be declared as static

   super, to suppress warnings relative to overriding a method without super invocations

   synthetic-access, to suppress warnings relative to unoptimized access from inner classes

   unchecked, to suppress warnings relative to unchecked operations

   unqualified-field-access, to suppress warnings relative to field access unqualified

   unused, to suppress warnings relative to unused code and dead code


4、注解的定义

使用 @interface 关键字声明一个注解

public @interface MyAnnotation1


注解中可以定义属性

String name default “defval”;


value是注解中的特殊属性

注解中定义的属性如果名称为 value, 此属性在使用时可以省写属性名


例如,声明一个注解:

@Retention(RetentionPolicy.RUNTIME)

public @interface MyAnno1 {

   String msg();


   int value();

}


5、一般注解

Java包括JSR250的一个实现“java平台的一般注解”,它规定针对一般概念的注解。这个JSR旨在避免不同的java技术定义类似的注解,从而造成重复。

遗憾的是,除了Generated之外,它里面规定的所有注解都是高级的资料,或者是适用于Java EE的,很多很杂。


6、标准元注解

元注解是针对注解进行标注的注解。有四种:

1)、@Documented:作用是在生成javadoc文档的时候将该Annotation也写入到文档中。

例如:

@Documented @interface DocumentedTest{ String doctest(); }


在类的方法上:

/** * 这是一个@Documented的测试,说不明白,只能看例子了 */ @DocumentedTest(doctest = "test") public void b2(){ }


产生JavaDoc文档:

t1.Bar @DocumentedTest(doctest = "test") public void b2() 这是一个@Documented的测试,说不明白,只能看例子了


2)、@Inherited 允许子类继承父类的注解。


3)、@Retention 指示注释类型的注释要保留多久。默认为 RetentionPolicy.CLASS。取值为枚举:

java.lang.annotation.RetentionPolicy:

   CLASS  编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。

   RUNTIME  编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。

   SOURCE  编译器要丢弃的注释。

4)、@Target 指示注释类型所适用的程序元素的种类。如果不指定则可以用在任一程序元素上。取值为枚举的数据类型java.lang.annotation.ElementType,枚举项含义为:

   ANNOTATION_TYPE  注释类型声明

   CONSTRUCTOR  构造方法声明

   FIELD  字段声明(包括枚举常量)

   LOCAL_VARIABLE 局部变量声明

   METHOD  方法声明

   PACKAGE  包声明

   PARAMETER  参数声明

   TYPE  类、接口(包括注释类型)或枚举声明


7、注解应用举例

网友评论
<