菲律宾二分彩

欢迎光临福州华大IT学院

  Java Annotation 必须把握的特性

  什么是Annotation?

  Annotation翻译为中文即为注解,意思就是提供除了程序本身逻辑外的额外的数据信息。Annotation对于标注的代码没有直接的影响,它不可以直接与标注的代码产生交互,但其他组件可以使用这些信息。

  Annotation信息可以被编译进class文件,也可以保留在Java 虚拟机中,从而在运行时可以获取。甚至对于Annotation本身也可以加Annotation。

  那些对象可以加Annotation

  类,方法,变量,参数,包都可以加Annotation。

  内置的Annotation

  @Override 重载父类中方法 @Deprecated 被标注的方法或类型已不再推荐使用

  @SuppressWarnings 阻止编译时的警告信息。其需要接收一个String的数组作为参数。 可供使用的参数有:

  unchecked

  path

  serial

  finally

  fallthrough

  可以用与其他annotation上的annotation

  @Retention

  确定Annotation被保存的生命周期, 需要接收一个Enum对象RetentionPolicy作为参数。

  public enum RetentionPolicy {    /**     * Annotations are to be discarded by the compiler.     */    SOURCE,    /**     * Annotations are to be recorded in the class file by the compiler     * but need not be retained by the VM at run time.  This is the default     * behavior.     */    CLASS,    /**     * Annotations are to be recorded in the class file by the compiler and     * retained by the VM at run time, so they may be read reflectively.     *     * @see java.lang.reflect.AnnotatedElement     */    RUNTIME}

  @Documented 文档化

  @Target

  表示该Annotation可以修饰的范围,接收一个Enum对象EnumType的数组作为参数。

  public enum ElementType {    /** Class, interface (including annotation type), or enum declaration */    TYPE,    /** Field declaration (includes enum constants) */    FIELD,    /** Method declaration */    METHOD,    /** Parameter declaration */    PARAMETER,    /** Constructor declaration */    CONSTRUCTOR,    /** Local variable declaration */    LOCAL_VARIABLE,    /** Annotation type declaration */    ANNOTATION_TYPE,    /** Package declaration */    PACKAGE}

  @Inherited

  该Annotation可以影响到被标注的类的子类。

  自定义Annotation

  JSE5.0以后我们可以自定义Annotation。下面就是一个简单的例子。

  @Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface MethodAnnotation {}

  下面的Person对象使用了自定义的MethodAnnotation。

  public class Person {    public void eat() {        System.out.println(eating);    }    @MethodAnnotation    public void walk() {        System.out.print(walking);    }}

  我们可以通过反射获取Annotation的信息。

  Class personClass = Person.class;        Method[] methods = personClass.getMethods();        for(Method method : methods){            if (method.isAnnotationPresent(MethodAnnotation.class)){                method.invoke(personClass.newInstance());            }        }

  输出:

  walking

  我们也可以给自定义的Annotation加方法。

  @Target(ElementType.TYPE)public @interface personAnnotation {    int id() default 1;    String name() default bowen;}

  下面是对personAnnotation的使用。

  @personAnnotation(id = 8, name = john)public class Person {    public void eat() {        System.out.println(eating);    }    @MethodAnnotation    public void walk() {        System.out.print(walking);    }}

  Annotation是如何被处理的

  当Java源代码被编译时,编译器的一个插件annotation处理器则会处理这些annotation。处理器可以产生报告信息,或者创建附加的Java源文件或资源。如果annotation本身被加上了RententionPolicy的运行时类,则Java编译器则会将annotation的元数据存储到class文件中。然后,Java虚拟机或其他的程序可以查找这些元数据并做相应的处理。

  当然除了annotation处理器可以处理annotation外,我们也可以使用反射自己来处理annotation。Java SE 5有一个名为AnnotatedElement的接口,Java的反射对象类Class,Constructor,Field,Method以及Package都实现了这个接口。这个接口用来表示当前运行在Java虚拟机中的被加上了annotation的程序元素。通过这个接口可以使用反射读取annotation。AnnotatedElement接口可以访问被加上RUNTIME标记的annotation,相应的方法有getAnnotation,getAnnotations,isAnnotationPresent。由于Annotation类型被编译和存储在二进制文件中就像class一样,所以可以像查询普通的Java对象一样查询这些方法返回的Annotation。

  Annotation的广泛使用

  Annotation被广泛用于各种框架和库中,下面就列举一些典型的应用.

  Junit

  Junit是非常有名的一款单元测试框架,使用Junit的时候需要接触大量的annotation。

&

我的位置: 菲律宾二分彩 >> Java Annotation 必须掌握的特性

2018-07-23

来源:


 

在线答疑

热门专题更多++

  • 福州华大IT学院
  • 佛山华大校区
  • 北大青鸟厦门华大教育
  • 厦门课工场
  • 福州华大IT学院
  • 地址:福州市仓山区北园路122号
  • 乘车路线:白湖亭、下濂、埔垱
  • 招生电话:0591-87880522    400-9966-370
  • 网址:www.xinvshang.com
  • 北大青鸟佛山华大校区
  • 地址:广东省佛山市禅城区佛山大道北143号
  • 乘车路线:张槎路口站、白燕公园站、轻工路口站、金沙新城南门站
  • 招生电话:0757-88726000    4006-989-522
  • 网址:
  • 北大青鸟厦门华大职业教育学院
  • 地址:厦门市集美区天阳路1-7号
  • 乘车路线:孙厝、永祥花园、第二医院、霞梧路口站
  • 招生电话:0592-5920811    4000-470-150
  • 网址:
  • 北大青鸟厦门课工场
  • 地址:厦门市集美区天阳路1-7号
  • 乘车路线:孙厝、永祥花园、第二医院、霞梧路口站
  • 招生电话:0592-5920811    4000-470-150
  • 网址:
  • 备案号:
  • 版权所有:福州市新生代计算机职业培训学校

北大青鸟华大校区公众平台

北大青鸟华大校区收款码

一分快三 北京快3 三分时时彩 分分彩投注 三分PK拾 广东快乐十分 分分彩投注 东京1.5分彩登陆 亚洲彩票 秒速赛车线路导航网