杰点

hello java

注解

注解 Annotation

一个注解就是一个类

@SuppressWarnings("deprecation") 源文件阶段

@Override  重写    源文件阶段

@Deprecated 过时   RUNTIME阶段

 

注解类
@interface A{
}

应用了“注解类”的类
@A
class B{
}

注解反射
class C{
B.class.isAnnotationPresent(A.class)

A a=B.class.getAnnotation(A.class)
}


@Retention元注解
RetetionPolicy.SOURCE  对应源文件
RetetionPolicy.CLASS   对应class文件
RetetionPolicy.RUNTIME 内存中的字节码

RetetionPolicy是枚举,
只包含 SOURCE,CLASS,RUNTIME三个元素

 1 //注解类
 2 import java.lang.annotation.ElementType;
 3 import java.lang.annotation.Retention;
 4 import java.lang.annotation.RetentionPolicy;
 5 import java.lang.annotation.Target;
 6 
 7 @Retention(RetentionPolicy.RUNTIME)
 8 @Target({ElementType.METHOD,ElementType.TYPE})  
 9 //Target 参数 一个可以,两个以上 参数为数组
10 //注解的注解目标({方法,类})  描述class,interface enum 的父类都是TYPE
11 public @interface MyAnnotation {
12     //为注解添加属性,这里的属性就是方法,不需要加public abstract。系统默认加
13     String color() default "blue"//为属性增加默认值
14     String value();  //当只有一个value属性时,赋值时可以不用value=
15 
16 }
17 

 1 //注解的使用
 2 @MyAnnotation(color="red",value="444")
 3 
 4 public class AnnotationTest {
 5 
 6     /**
 7      * @param args
 8      */
 9     @SuppressWarnings("deprecation"
10     @MyAnnotation("bacd")
11     public static void main(String[] args) {
12         // TODO Auto-generated method stub
13         System.runFinalizersOnExit(true);
14         //判断字节码中是否有注解,不加RUNTIME则没有,字节码在内存中,RUNTIME内存运行阶段
15         if(AnnotationTest.class.isAnnotationPresent(MyAnnotation.class))
16         {
17             MyAnnotation myAnnotation=(MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class);
18             System.out.println(myAnnotation.color());
19         }
20     }
21 
22 }
23 

posted on 2011-01-04 10:01 杰点 阅读(209) 评论(0)  编辑  收藏 所属分类: JAVA


只有注册用户登录后才能发表评论。


网站导航:
 
<2025年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

留言簿

文章分类

文章档案

搜索

最新评论