黑马程序员_注解概述

                                                                  -------android培训java培训、期待与您交流! ----------  



了解注解及java提供的几个基本注解
·@UpperessWarning 编译警告
·@Override  继承
·@Deprecated过时编译
总结:
注解相当于一种标记,加了注解就等于打上了某种标记,开发工具和其他程序可以用反射了解你的类

及各种元素上有无 标记,看你有什么标记就去干相应的使。标记可以加在包,类,字段,方法,方法的

参数以及局部变量上。

自定义注解及其应用
·定义一个简单的注解:pulbic @interface MyAnnocation{}
·把它加在某个类上:@MyAnnocation public class AnnocationTest{}
·用反射进行测试AnnocationTest的定义上是否有@MyAnnocation
·根据发射测试问题,引出@Retention元注解的讲解,其三种取值:RetentionPolicy.SOUPCE.RetentionPolicy.CLASS.
RetentionPolicy.RUNTIME:分别对应:java源文件-->class文件-->内存中的字节码

演示和讲解@Target元注解
Target的默认值为任何元素,设置Target等于ElementType.METHOD,原来加在类上的注解就报错了。

改为数组方式设置{ElementType.METHOD.ElementType.Type}就可以了。


为注解添加属性:

什么是注解的属性

一个注解相当于一个胸牌,如果你胸前贴了胸牌,你就是传智播客的学生,否则,就不是。如果还想区分是传智播客哪个班的学生,这时候就可以为胸牌添加一个属性来进行区分。为了属性的标记效果为:@MyAnnocation(color=red);

·定义基本类型的属性和应用属性:

   在注解中添加String color();
   @MyAnnocation(color=red);

·用反射方式获得注解对应的实例对象后,在通过该对象调用属性对应的方法。

为属性制定缺醒值:
String color() default "yellow";
value属性:
String value() default "xxx"
如果注解中一个名为value的属性,且你只想设置value属性

为注解添加高级属性
·数组类型的属性
int [] arrayAttr() default{1,2,3}
@MyAnnocation(arrayAttr={2,3,4})
如果数组属性只有一个元素,这时候属性值可以省略大廓

·枚举类型的属性
EnumTest TrafficLamp lamp();
@MyAnnocation(lamp=EnumTest.TrfficLamp GREEN)

注解的类型属性:

---------------------------------------------------------------------------------------------------------------------------------

package anucation;
public @interface MetaAnnocation {
  String value();
}

--------------------------------------------------------------------------------------

//原注解  元数据 元信息
@Retention(RetentionPolicy.RUNTIME)     //保留到运行期间
@Target({ElementType.METHOD,ElementType.TYPE})
//ElementType.METHOD注释只能放在方法上,METHOD,ElementType.TYPE}表示也可放在类上
public @interface ItcastAnnocation {
String color() default "blue";     //缺省属性
String value();
    int [] arr()default{1,2,3};       //数组类型的属性
//    EnumTest TrafficLamp lamp() default EnumTest.TrafficLamp.RED;       //·枚举类型的属性
   MetaAnnocation annocationAttr() default@MetaAnnocation("AAA");      //注解的类型属性
}

--------------------------------------------------------------------------------------

@ItcastAnnocation(annocationAttr=@MetaAnnocation("aa"),value="abc") //注解中标记了缺省值  就不必声明了
public class Annocation {
public static void main(String [] args){
if(Annocation.class.isAnnotationPresent(ItcastAnnocation.class)){
ItcastAnnocation annocation=Annocation.class.getAnnotation(ItcastAnnocation.class);
    System.out.println(annocation.color());
    System.out.println(annocation.value());
//     System.out.println(annocation.lamp().nextLamp.name());//GREEN
    System.out.println(annocation.annocationAttr());
}
}
}
--------------------------------------------------------------------------

打印结果

blue
abc

GREEN
@anucation.MetaAnnocation(value=aa)

--------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------



------- android培训java培训、期待与您交流! ----------

详细请查看:http://edu.csdn.net/heima/

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值