/**定義該註解能使用的位置,如今表示同在方法上**/ /** * ElementType下還包括: * CONSTRUCTOR:構造函數聲明; * FIELE:屬性聲明,包括枚舉; * LOCAL_VARIABLE:本地變量 * PACKAGE:包級別 * PARAMETER:參數級別 * TYPE:類、接口(包括註解本身自己)、枚舉 */ @Target(value = { ElementType.METHOD }) /**定義該註解可用範圍,如今表示在運行時可用**/ /** *RetentionPolicy還包括: *SOURCE:註解只在編譯器有效 *CLASS:只活動在編譯器的class文件裏,jvm時期就無效 *RUNTIME:運行時jvm仍然保持着,可以反射獲得 */ @Retention(RetentionPolicy.RUNTIME) /** *除了以上兩個註解還有兩個: *@Documented:生成文檔時也一塊兒帶到文檔中去 *@Inherted:容許子類繼承父類的註解 */ /**註解不容許繼承 不能 extends @interface**/ public @interface Test { /**註解元素不容許使用包裝類型**/ public int id(); public String description() default "no description"; }
public class UseAnnotation { public static void main(String[] args) { Class<?> clazz = AddAnnotation.class; Method [] ms = clazz.getDeclaredMethods(); for(Method m : ms) { Test t = m.getAnnotation(Test.class); if(null != t) { System.out.println(t.id()+t.description()); } } } } class AddAnnotation { @Test(id=10) public void method() { } @Test(id=11,description="method2") public void mehtod2() { } /**也能夠聲明在方法參數上!!而且不用@Test**/ public void method3(Test test) { if(test.id()==10) { } } }