zoukankan      html  css  js  c++  java
  • Java 注解

    Java 注解

    一、什么是Java注解:

      Java注解(Annotation),是Java代码里的特殊标记,它为我们在代码中添加用Java程序无法表达的额外信息提供了一种形式化的方法,使我们在未来可以方便的使用这些被注解修饰的程序元素(类、方法、变量)。

    二、Java注解的作用:

      1、将由编译器来测试和验证的格式,存储有关程序的额外信息。比如@Override,可以让编译器检查子类中是否有重写父类中的方法。

      2、生成描述性文件,甚至新的类定义。

      3、减轻编写模板代码的负担。

      4、使代码更加干净易懂。

    三、Java注解的分类:

         1、Java SE5内置了三种内建注解

         @Override,表示当前的方法定义将覆盖超类中的方法。

         @Deprecated,使用了注解为它的元素编译器将发出警告,因为注解@Deprecated是不赞成使用的代码,被弃用的代码。

         @SuppressWarnings,关闭不当编译器警告信息。

      2、Java还提供了4种元注解

      用来修饰其他注解定义,这4个注解分别是@Taget、@Retention、@Decoumented、@Inherited。下面表格中说明4种注解的说明。

    @Target

    表示该注解可以用于什么地方,可能的ElementType参数有:

    CONSTRUCTOR:构造器的声明

    FIELD:域声明(包括enum实例)

    LOCAL_VARIABLE:局部变量声明

    METHOD:方法声明

    PACKAGE:包声明

    PARAMETER:参数声明

    TYPE:类、接口(包括注解类型)或enum声明

    @Retention

    表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括:

    SOURCE:注解将被编译器丢弃

    CLASS:注解在class文件中可用,但会被VM丢弃

    RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息。

    @Document

    将注解包含在Javadoc中

    @Inherited

    允许子类继承父类中的注解

      3、自定义注解

      通过元注解,用户自己编写注解。例如下面代码就是用户定义的自定义注解。

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Test {
     
    }

      除了@符号,注解很像是一个接口。定义注解的时候需要用到元注解,上面用到了@Target和@RetentionPolicy,它们的含义在上面的表格中已近给出。 

      在注解中一般会有一些元素以表示某些值。注解的元素看起来就像接口的方法,唯一的区别在于可以为其制定默认值。没有元素的注解称为标记注解,上面的@Test就是一个标记注解。 

      注解的可用的类型包括以下几种:所有基本类型、String、Class、 enum、Annotation、以上类型的数组形式。元素不能有不确定的值,即要么有默认值,要么在使用注解的时候提供元素的值。而且元素不能使用 null作为默认值。注解在只有一个元素且该元素的名称是value的情况下,在使用注解的时候可以省略“value=”,直接写需要的值即可。 

         下面看一个定义了元素的注解。

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface UseCase {
        public String id();
        public String description() default "no description";
    }

      定义了注解,必然要去使用注解。

    复制代码
    public class PasswordUtils {
         @UseCase(id = 47, description = "Passwords must contain at least one numeric")
         public boolean validatePassword(String password) {
             return (password.matches("\w*\d\w*"));
         }
     
         @UseCase(id = 48)
         public String encryptPassword(String password) {
             return new StringBuilder(password).reverse().toString();
         }
     }
    复制代码

      使用注解最主要的部分在于对注解的处理,那么就会涉及到注解处理器。

      从原理上讲,注解处理器就是通过反射机制获取被检查方法上的注解信息,然后根据注解元素的值进行特定的处理。

    复制代码
    Found Use Case:47 Passwords must contain at least one numeric
    
    Found Use Case:48 no description
    
    Warning: Missing use case-49
    
    Warning: Missing use case-50
    复制代码

      上面的三段代码结合起来是一个跟踪项目中用例的简单例子

    四、注解和注释的区别:

      注解与普通的注释有一定的区别,也有一定的联系。注解和注释都属于对代码的描述,注释的作用只是简单的描述程序的信息,它不会被程序所读取;而注解则是Java代码中的特殊标记,这些标记可以在编译、加载、运行时被读取,并执行相应的处理。

  • 相关阅读:
    针对数据库索引的优化
    acd
    HDOJ 5045 Contest
    《计算机时代》2015年第7期刊登出《基于数据仓库星形模式的广东省快速公路一张网资金结算情况分析系统》
    为什么大多数编程语言中的数组都从0開始
    十年,青春就是一转眼的事
    电子商务系统的设计与实现(十四):菜单高亮
    最近1个月的财务计划没有做好,囧啊
    最近1个月的财务计划没有做好,囧啊
    雷观(十九):我的人生观
  • 原文地址:https://www.cnblogs.com/futao123/p/5068689.html
Copyright © 2011-2022 走看看