黑马程序员----JAVA----注解

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

span style="font-size:18px;">
 
注解(注释)Annotation类
 
jdk1.5以后提供的新特性
 
①类中的注释有三个@Deprecated(废除)、@Override(复写)、@SuppressWarnings(压缩警告)
 
Deprecated类
 
用 @Deprecated 注释的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。在使用不被赞成的程序元素或在不被赞成的代码中执行重写时,编译器会发出警告。
 
Override类
 
@Override表示一个方法声明打算重写超类中的另一个方法声明。
 


SuppressWarnings类
 
@SuppressWarnings指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定的编译器警告。如果要在特定的方法中取消显示某个警告,则应该注释该方法而不是注释它的类。
 
注释的反射:
 
class类中的isAnnotation()和isAnnotationPresent方法可以检测这个class对象上是否有注释并且可以获取这个注释
 
boolean isAnnotation() 

如果此 Class 对象表示一个注释类型则返回 true。 

boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) 

如果指定类型的注释存在于此元素上,则返回 true,否则返回 false。 

②注释中的注释有四个Documented类、Inherited类、Retention类和Target类
 
Documented类
 
指示某一类型的注释将通过 javadoc 和类似的默认工具进行文档化。
 
Inherited类
 
指示注释类型被自动继承。如果在注释类型声明中存在 Inherited 元注释,并且用户在某一类声明中查询该注释类型,同时该类声明中没有此类型的注释,则将在该类的超类中自动查询该注释类型。此过程会重复进行,直到找到此类型的注释或到达了该类层次结构的顶层 (Object) 为止。如果没有超类具有该类型的注释,则查询将指示当前类没有这样的注释。 

注意,如果使用注释类型注释类以外的任何事物,此元注释类型都是无效的。还要注意,此元注释仅促成从超类继承注释;对已实现接口的注释无效。 

Retention类
 
指示注释类型的注释要保留多久。如果注释类型声明中不存在 Retention 注释,则保留策略默认为 RetentionPolicy.CLASS。
 
三种取值:RetentionPolicy.SOURCE 、RetentionPolicy.CLASS 、RetentionPolicy.RUNTIME 分别对应的阶段为:java源文件,class文件,内存字节码
 
注意:只有元注释类型直接用于注释时,Target 元注释才有效。
 
Target类
 
指示注释类型所适用的成分。
 
参数:
 
ElementType.[
 
ANNOTATION_TYPE 注释类型声明 

CONSTRUCTOR 构造方法声明 

FIELD 字段声明(包括枚举常量) 

LOCAL_VARIABLE 局部变量声明 

METHOD 方法声明 

PACKAGE 包声明 

PARAMETER 参数声明 

TYPE 类、接口(包括注释类型)或枚举声明 ]
 


③。注解属性
 
注解的属性就类似于注释的标志
 
注解的属性可以包括String类型,Class类型,8个基本类型,8个基本类型加String类型的数组类型,枚举类型,注释类型。
 
自定义注解实例
 
package cn.itcast.day2;
 import java.lang.annotation.Documented;
 import java.lang.annotation.Inherited;
 import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 import java.lang.annotation.ElementType;
 import java.lang.annotation.RetentionPolicy;
 /*
  * 元注解@Target,@Retention,@Documented,@Inherited
  * @Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括:
  * ElemenetType.CONSTRUCTOR 构造器声明
  * ElemenetType.FIELD 域声明(包括 enum 实例)
  * ElemenetType.LOCAL_VARIABLE 局部变量声明
  * ElemenetType.METHOD 方法声明
  * ElemenetType.PACKAGE 包声明
  * ElemenetType.PARAMETER 参数声明
  * ElemenetType.TYPE 类,接口(包括注解类型)或enum声明
  * @Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:
  * RetentionPolicy.SOURCE 注解将被编译器丢弃
  * RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃
  * RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
  * @Documented 将此注解包含在 javadoc 中
  * @Inherited 允许子类继承父类中的注解
  */
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
 @Documented
 @Inherited
 /*
 * 定义注解 Test
 * 注解中含有两个元素 id 和 description
 * description 元素 有默认值 "no description"
 */
 public @interface Test {
      public int id();
      public String description() default "no description";
 }
 
下面是一个使用注解 和 解析注解的实例
 
package cn.itcast.day2;
 import java.lang.reflect.Method;
 public class Test_1 {
   /*
    * 被注解的三个方法
      */
  @Test(id = 1, description = "hello method_1")
  public void method_1() {
 
  }
   @Test(id = 2)
   public void method_2() {
 
 }
 
  @Test(id = 3, description = "last method")
      public void method_3() {
 
  }
  /*
 
  * 解析注解,将Test_1类 所有被注解方法 的信息打印出来
 
 */
  public static void main(String[] args) {
   Method[] methods = Test_1.class.getDeclaredMethods();
   for (Method method : methods) {
    /*
              * 判断方法中是否有指定注解类型的注解
 
  */
             boolean hasAnnotation = method.isAnnotationPresent(Test.class);
             if (hasAnnotation) {
                 /*
                  * 根据注解类型返回方法的指定类型注解
     */
     Test annotation = method.getAnnotation(Test.class);
      System.out.println("Test( method = " + method.getName()
         + " , id = " + annotation.id() + " , description = "
         + annotation.description() + " )");
    }
   }
  }
 }
 
输出结果如下:
 



    Test( method = method_1 , id = 1 , description = hello method_1 )
 
    Test( method = method_2 , id = 2 , description = no description )
 
    Test( method = method_3 , id = 3 , description = last method )
 


 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值