A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qixing0918 中级黑马   /  2013-11-6 18:40  /  1174 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.先了解3个基本的注解
---@Override 方法上面 判断是否重
---@Deprecated 方法上面 表示方法废弃不建议被使用
---@SuppressWarnings("deprecation") 压制警告(废弃的警告)
2.学会自己写注解
---注解跟类接口同级 书写方式public @interface ItcastAnnotation
---在注解上定义注解
// 元注解 元数据 元信息 retention表示3中类型 class source runtime// target 表示注解的作用范围 比如 method 方法上面 type 类接口 注解枚举上面@Target({ ElementType.METHOD, ElementType.TYPE })@Retention(RetentionPolicy.RUNTIME)
这两个注解定义元素都是 枚举类型
public @interface Target { ElementType[] value(); } public @interface Retention { RetentionPolicy value(); }

一个注解实例
  1. // 元注解 元数据 元信息 retention表示3中类型 class source runtime
  2. // target 表示注解的作用范围 比如 method 方法上面 type 类接口 注解枚举上面
  3. @Target({ ElementType.METHOD, ElementType.TYPE })
  4. @Retention(RetentionPolicy.RUNTIME)
  5. public @interface ItcastAnnotation {
  6. String color() default "blue";

  7. // 特殊属性比如 @SuppressWarnings("deprecation") 就是等于value=“deprecation”
  8. // 但只有String value(); 时才能用 如果还有 String color() 但还想用就要设定默认值default "blue";
  9. // 支持 @ItcastAnnotation("qixing")与
  10. // @ItcastAnnotation(color="red",value="qixing")
  11. String value();

  12. // 定义数组属性
  13. int[] arrayAttr() default { 3, 4, 5 };
  14. // 可以是枚举
  15. /*
  16. * public @interface Target { ElementType[] value(); }
  17. * public @interface Retention { RetentionPolicy value(); }
  18. */

  19. //还可以是annotation
  20. MyAnnotation annotationAttr() default @MyAnnotation("qixing");



  21. }
复制代码
注解的使用
  1. @ItcastAnnotation(color="red",value="qixing",annotationAttr = @MyAnnotation("yinhe"))
  2. public class AnnotationTest {
  3. //注解实例
  4. //压制警告
  5. @SuppressWarnings("deprecation")

  6. public static void main(String[] args) {

  7. /* System.runFinalizersOnExit(true);
  8. System.out.println("nihao");*/
  9. if ( AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)) {

  10. ItcastAnnotation anno = AnnotationTest.class.getAnnotation(ItcastAnnotation.class);
  11. System.out.println(anno);
  12. System.out.println(new Person());
  13. System.out.println(anno.color());
  14. System.out.println(anno.value());
  15. System.out.println(anno.arrayAttr().length);
  16. System.out.println(anno.annotationAttr().value());

  17. }

  18. }
  19. //作废方法
  20. /* @Deprecated
  21. public static void sayHello(){
  22. System.out.println("nihao");
  23. }*/
  24. //还有就是@override 方法上面 判断是否重写
  25. /* @Override
  26. public String toString() {
  27. return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
  28. }*/


  29. }
复制代码
注解是什么呢  比如方法上的注解  
1.ItcastAnnotation anno = AnnotationTest.class.getAnnotation(ItcastAnnotation.class); 得到方法上单注解名称
2.通过反射class.forname()得到 注解对象
3.比如3大基本注解 其实就是得到名字  jvm判断对象名字是否与override相等   如果相当就去执行判断是否重写的方法


点评

挺好的,快学完了吧,走流程木有  发表于 2013-11-7 14:55

2 个回复

倒序浏览
快了 再写一篇 交通灯的博客    就申请考试了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马