java since_Java Annotation(since 5.0)

Annotation是从JDK5.0开始被引入的新特性。下面是Java文档中对该特性的一段描述:

The Java platform has always had various ad hoc annotation mechanisms. For example the transient modifier is an ad hoc annotation indicating that a field should be ignored by the serialization subsystem, and the @deprecated javadoc tag is an ad hoc annotation indicating that the method should no longer be used. As of release 5.0, the platform has a general purpose annotation (also known as metadata) facility that permits you to define and use your own annotation types. The facility consists of a syntax for declaring annotation types, a syntax for annotating declarations, APIs for reading annotations, a class file representation for annotations, and an annotation processing tool.

Annotation特性是关于元数据(meatdata)的使用的技术,元数据(meatdata)是关于数据的数据,meatdata可以用于创建文档,跟踪代码的依赖关系,甚至执行基本的编译时检查。meatdata的使用价值可以分为三大类:文档、编译器检查(Override)和代码分析。编译器检查的例子是Override,它表示该方法重载了父类的一个方法,如果不小心把方法名字写错了,而父类中没有这个方法,编译时就会报错。

JSR 175, annotations "do not directly affect the semantics of a program.Development and deployment tools can,however, read these annotations and process them in some fashion, perhaps producing additional Java programming language source files, XML documents, or other artifacts to be used in conjunction with the program containing the annotations."

下面是一个使用Annotation的例子。

定义Annotation:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

/** */

/**0818b9ca8b590ca3270a3433284dd417.png * 

0818b9ca8b590ca3270a3433284dd417.png*/

0818b9ca8b590ca3270a3433284dd417.png

package

cn.ac.ict.hla.annotation;

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

import

java.lang.annotation.

*

;

0818b9ca8b590ca3270a3433284dd417.png

import

java.lang.annotation.Target;

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

/** */

/**0818b9ca8b590ca3270a3433284dd417.png *@authorJackie

0818b9ca8b590ca3270a3433284dd417.png *

0818b9ca8b590ca3270a3433284dd417.png * Indicates that the annotated method is a test method.

0818b9ca8b590ca3270a3433284dd417.png * This annotation should be used only on parameterless static methods.

0818b9ca8b590ca3270a3433284dd417.png*/

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png@Retention(RetentionPolicy.RUNTIME)

0818b9ca8b590ca3270a3433284dd417.png@Target(ElementType.METHOD)

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

public

@

interface

Test

...

{

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png}

0818b9ca8b590ca3270a3433284dd417.png

被自定义的Annotation标注的类

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

/** */

/**0818b9ca8b590ca3270a3433284dd417.png * 

0818b9ca8b590ca3270a3433284dd417.png*/

0818b9ca8b590ca3270a3433284dd417.png

package

cn.ac.ict.hla.annotation;

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

/** */

/**0818b9ca8b590ca3270a3433284dd417.png *@authorJackie

0818b9ca8b590ca3270a3433284dd417.png *

0818b9ca8b590ca3270a3433284dd417.png*/

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

public

class

Foo

...

{

0818b9ca8b590ca3270a3433284dd417.png    

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png    @Testpublicstaticvoidm1()...{ }0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicstaticvoidm2()...{ }0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png    @Testpublicstaticvoidm3()...{

0818b9ca8b590ca3270a3433284dd417.pngthrownewRuntimeException("Boom");

0818b9ca8b590ca3270a3433284dd417.png    }0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicstaticvoidm4()...{ }0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png    @Testpublicstaticvoidm5()...{ }0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicstaticvoidm6()...{ }0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png    @Testpublicstaticvoidm7()...{

0818b9ca8b590ca3270a3433284dd417.pngthrownewRuntimeException("Crash");

0818b9ca8b590ca3270a3433284dd417.png    }0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicstaticvoidm8()...{ }0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png/** *//**0818b9ca8b590ca3270a3433284dd417.png     * 

0818b9ca8b590ca3270a3433284dd417.png*/0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicFoo()...{

0818b9ca8b590ca3270a3433284dd417.png//TODO Auto-generated constructor stub0818b9ca8b590ca3270a3433284dd417.png}0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png/** *//**0818b9ca8b590ca3270a3433284dd417.png     *@paramargs

0818b9ca8b590ca3270a3433284dd417.png*/0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicstaticvoidmain(String[] args)...{

0818b9ca8b590ca3270a3433284dd417.png//TODO Auto-generated method stub0818b9ca8b590ca3270a3433284dd417.png0818b9ca8b590ca3270a3433284dd417.png    }0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png}

0818b9ca8b590ca3270a3433284dd417.png

使用被Annotation标注的类

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

/** */

/**0818b9ca8b590ca3270a3433284dd417.png * 

0818b9ca8b590ca3270a3433284dd417.png*/

0818b9ca8b590ca3270a3433284dd417.png

package

cn.ac.ict.hla.annotation;

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

import

java.lang.reflect.Method;

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

/** */

/**0818b9ca8b590ca3270a3433284dd417.png *@authorJackie

0818b9ca8b590ca3270a3433284dd417.png *

0818b9ca8b590ca3270a3433284dd417.png*/

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

public

class

RunTests

...

{

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png/** *//**0818b9ca8b590ca3270a3433284dd417.png     *@paramargs

0818b9ca8b590ca3270a3433284dd417.png*/0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicstaticvoidmain(String[] args)...{

0818b9ca8b590ca3270a3433284dd417.pngintpassed=0, failed=0;

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngtry...{

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngfor(Method m : Class.forName("cn.ac.ict.hla.annotation.Foo").getMethods())...{

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngif(m.isAnnotationPresent(Test.class))...{

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngtry...{

0818b9ca8b590ca3270a3433284dd417.png                       m.invoke(null);

0818b9ca8b590ca3270a3433284dd417.png                       passed++;

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png                    }catch(Throwable ex)...{

0818b9ca8b590ca3270a3433284dd417.png                       System.out.printf("Test %s failed: %s %n", m, ex.getCause());

0818b9ca8b590ca3270a3433284dd417.png                       failed++;

0818b9ca8b590ca3270a3433284dd417.png                    }0818b9ca8b590ca3270a3433284dd417.png                 }0818b9ca8b590ca3270a3433284dd417.png              }0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png        }catch(SecurityException e)...{

0818b9ca8b590ca3270a3433284dd417.png//TODO Auto-generated catch block0818b9ca8b590ca3270a3433284dd417.pnge.printStackTrace();

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png        }catch(ClassNotFoundException e)...{

0818b9ca8b590ca3270a3433284dd417.png//TODO Auto-generated catch block0818b9ca8b590ca3270a3433284dd417.pnge.printStackTrace();

0818b9ca8b590ca3270a3433284dd417.png        }0818b9ca8b590ca3270a3433284dd417.png          System.out.printf("Passed: %d, Failed %d%n", passed, failed);

0818b9ca8b590ca3270a3433284dd417.png    }0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png}

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值