您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > [Java基础教程-兄弟连马剑威]-138-注解
注解马剑威第138讲课程大纲1、认识Annotation2、系统定义的三个Annotation3、自定义Annotation4、Retention和RetentionPolicy5、反射与Annotation6、@Documented注解7、@Target注解8、@Inherited注解1、认识Annotation•JDK1.5开始,Java增加了对元数据(即类的组成单元数据)的支持,也就是(Annotation)注解,他是代码里做的特殊标记,这些标记可以在编译,类加载,运行时在不改变原有逻辑的情况下,被读取,并执行相应的处理,通过使用Annotation,程序员可以在源文件中嵌入一些补充的信息。代码分析工具,开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。Annotation类似于修饰符一样被使用,可以用于包,类,构造方法,方法,成员变量,参数,局部变量的声明。•注意:•Annotation是一个接口•java.lang.Annotation接口.2、系统定义的三个Annotation•在JDK1.5之后,在系统中提供了三个Annotation,分别是:@Override、@Deprecated、@SuppressWarnings。•@Override•表示当前的方法定义将覆盖超类中的方法。如果你不小心拼写错误,或者方法签名对不上被覆盖的方法,编译器就会发出错误提示。•@Deprecated•表示的是一个类或方法已经不再建议继续使用了,标记为已过时。•@SuppressWarnings•表示关闭不当的编译器警告信息。3、自定义Annotation•注解应用需要三个步骤:•(1)编写注解•(2)在类上应用注解•(3)对应用了注解的类进行反射操作的类•自定义Annotation的语法如下:•访问控制权限@interfaceAnnotation名称{}•例如:•public@interfaceMyAnnotation{}3、自定义Annotation在Annotation中定义变量•public@interfaceMyAnnotation{•publicStringname();•publicStringinfo();•}•定义变量后,在调用此Annotation时必须设置变量值。•@MyAnnotation(name=“XB,info=“WSDR)•publicclassDemo{•}通过default指定变量默认值,•有了默认值在使用时可以不设值•public@interfaceMyAnnotation{•publicStringname()default“XB;•publicStringinfo()default“WSDR;•}3、自定义Annotation定义一个变量的数组,接收一组参数•public@interfaceMyAnnotation{•publicString[]name();•}•使用时指定数组值•@MyAnnotation(name={“XB,“XH})•publicclassDemo{•}使用枚举限制变量取值范围•publicenumColor{•RED,GREEN,BLUE•}•public@interfaceMyAnnotation{•publicColorcolor();•}4、Retention和RetentionPolicy•Annotation要想决定其作用的范围,通过@Retention指定,而Retention指定的范围由ReteiontPolicy决定,RetentionPolicy指定了三种范围:•示列:•@Retention(value=RetentionPolicy.RUNTIME)•public@interfaceMyAnnotation{•publicStringname();•}范围描述publicstaticfinalRetentionPolicySOURCE在java源程序中存在publicstaticfinalRetentionPolicyCLASS在java生成的class中存在publicstaticfinalRetentionPolicyRUNTIME在java运行的时候存在5、反射与Annotation•一个Annotation真正起作用,必须结合反射机制,在反射中提供了以下的操作方法:java.lang.reflect.AccessibleObject方法名称描述publicbooleanisAnnotationPresent(Class?extendsAnnotationannotationClass)判断是否是指定的AnnotationpublicAnnotation[]getAnnotations()得到全部的Annotation5、反射与Annotation•示例:•Class?cls=Class.forName(“com.vince.annotation.Test);•Methodmet=cls.getMethod(“setName);//找到toString()方法•if(met.isAnnotationPresent(MyAnnotation.class)){•MyAnnotationmy=(MyAnnotation)met•.getAnnotation(MyAnnotation.class);•Stringname=my.name();•Stringinfo=my.info();•System.out.println(name=+name);•System.out.println(info=+info);•}6、@Documented注解•此注解表示的是文档化,可以在生成doc文档的时候添加注解。•@Documented•@Retention(value=RetentionPolicy.RUNTIME)•public@interfaceMyAnnotation{•publicStringname();•publicStringinfo();•}•可以增加一些DOC注释。•/**•*这个方法是从Object类中覆写而来的•*/•@MyAnnotation(name=“XB,info=“WSDR)•publicStringtoString(){•returnhello;•}7、@Target注解•@Target注解表示的是一个Annotation的使用范围,例如:之前定义的MyAnnotation可以在任意的位置上使用。范围描述publicstaticfinalElementTypeTYPE只能在类或接口或枚举上使用publicstaticfinalElementTypeFIELD在成员变量使用publicstaticfinalElementTypeMETHOD在方法中使用publicstaticfinalElementTypePARAMETER在参数上使用publicstaticfinalElementTypeCONSTRUCTOR在构造中使用publicstaticfinalElementTypeLOCAL_VARIABLE局部变量上使用publicstaticfinalElementTypeANNOTATION_TYPE只能在Annotation中使用publicstaticfinalElementTypePACKAGE只能在包中使用8、@Inherited注解•@Inherited表示一个Annotation是否允许被其子类继承下来。•示例•@Inherited•@Target(value=ElementType.TYPE)•@Retention(value=RetentionPolicy.RUNTIME)•public@interfaceMyAnnotation{•publicStringname();•publicStringinfo();•}•使用时允许被其子类所继承。谢谢Thanks
本文标题:[Java基础教程-兄弟连马剑威]-138-注解
链接地址:https://www.777doc.com/doc-7534505 .html