最近看到很多项目都是用了自定义注解,例如

1.什么是注解?

     元数据(metadata),就是指数据的数据,元数据是描述数据的,就像数据库中的,表的字段,每一个

     字段描述这个字段下面·的数据的含义,j2Se5.0中提供的注释就是java源代码的源数据,注释就是描述

      java源代码的。使用@后面跟注解

   简单一点:

      一个注解是一个类

      注解相当于一种标记,在程序中加上了注解就等于为程序加上了某种标记,以后,
      JAVAC编译器,开发工具和其他程序可以用反射来了解你的类以及各种元素上有无任何标记,看你有什么标记,就去干相应的事。

       注解@Override用在方法上,当我们想重写一个方法时,在方法上加@Override,当我们方法
        的名字出错时,编译器就会报错,如图:

       注解@SuppressWarnings用来压制程序中出来的警告,比如在没有用泛型或是方法已经过时的时候,

2.J2SE5.0中预定义的注释

      在J2SE5.0的java.lang包中预定义了三个注释。它们是Override、Deprecated和SuppressWarnings。下面分别解释它们的含义。

     
           1.Override注释:仅用于方法(不可用于类、包的生命或其他),指明注释的方法将覆盖超类中的方法(如果覆盖父类的方法而没有注 
      释就无法编译该类),注释还能确保注释父类方法的拼写是正确(错误的编写,编译器不认为是子类的新方法,而会报错) 
           2.@Deprecated注释:对不应再使用的方法进行注释,与正在声明为过时的方法放在同一行。使用被     Deprecated注释的方法,编译器会 
      提示方法过时警告(”Warring”) 
       

3.@SuppressWarnings注释:单一注释,可以通过数组提供变量,变量值指明要阻止的特定类型警告(忽略某些警告)。数组中的变量指明要阻止的警告        @SuppressWarnings(value={”unchecked”,”fallthrough”}))

    

      这个做了解就可以了

3.java中的自定义注解  (@interface)

      它类似于新创建一个接口类文件,但为了区分,我们需要将它声明为@interface

      @interface:注释声明,定义注释类型(与默认的Override等三种注释类型类似)。请看下面实例:

      

 

4.@Target作用

    指定程序元定义的注解所使用的地方,它使用了另一个类:ElementType,是一个枚举类定义了注释类型可以应用到不同的程序元素以免使用者误用

    

    

        TYPE, // 指定适用点为 class, interface, enum  
         FIELD, // 指定适用点为 field  
         METHOD, // 指定适用点为 method  
         PARAMETER, // 指定适用点为 method 的 parameter  
         CONSTRUCTOR, // 指定适用点为 constructor  
         LOCAL_VARIABLE, // 指定使用点为 局部变量  
         ANNOTATION_TYPE, //指定适用点为 annotation 类型  
         PACKAGE // 指定适用点为 package

   

5.@Retention作用

    这个元注释和java编译器处理注释的注释类型方式相关,告诉编译器在处理自定义注释类型的几种不同的选择,需要使用RetentionPolicy枚举类。此枚举类只有一个    成员变量,可以不用指明成名名称而赋值

类中有个RetentionPolicy类,也是一个枚举类,具体看代码:

public enum RetentionPolicy {  
     SOURCE, // 编译器处理完Annotation后不存储在class中  
     CLASS, // 编译器把Annotation存储在class中,这是默认值  
     RUNTIME // 编译器把Annotation存储在class中,可以由虚拟机读取,反射需要  
}

6.@Documented

    是一个标记注释,表示注释应该出现在类的javadoc中,因为在默认情况下注释时不包括在javadoc中的。

    所以如果花费了大量的时间定义一个注释类型,并想描述注释类型的作用,可以使用它。
      

    注意他与@Retention(RetentionPolicy.RUNTIME)配合使用,因为只有将注释保留在编译后的类文件中由虚拟机加载,

    然后javadoc才能将其抽取出来添加至javadoc中。

7. @Inherited

    如果一个方法使用了的注释用了@inherited,

    那么其子类的该方法同样继承了该注释

8.小例子

package zhujei2;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Documented
  @Retention(RetentionPolicy.RUNTIME)
 public @interface Person{
      String name();
     int age();
  }

package zhujei2;
 
@Person(name="我爱你",age=250)
public class test2 {

public static void print(Class c){
                   System.out.println(c.getName());
                  
                 //java.lang.Class的getAnnotation方法,如果有注解,则返回注解。否则返回null
             Person person = (Person)c.getAnnotation(Person.class);
              
            if(person != null){
                  System.out.println("name:"+person.name()+" age:"+person.age());
                 }else{
                 System.out.println("person unknown!");
             }
          }
              public static void main(String[] args){
              test2.print(test2.class);
          }
    
}

Java annotation 自定义注释@interface的用法的更多相关文章

  1. java中自定义注释@interface的用法

    一.什么是注释     说起注释,得先提一提什么是元数据(metadata).所谓元数据就是数据的数据.也就是说,元数据是描述数据的.就象数据表中的字段一样,每个字段描述了这个字段下的数据的含义.而J ...

  2. [转]自定义注释@interface的用法

    一.什么是注释     说起注释,得先提一提什么是元数据(metadata).所谓元数据就是数据的数据.也就是说,元数据是描述数据的.就象数据表中的字段一样,每个字段描述了这个字段下的数据的含义.而J ...

  3. Java 自定义注释@interface的用法

    最简单的待校验的注解定义 @Documented @Constraint(validatedBy = ExistBlankByListValidator.class) @Target({PARAMET ...

  4. java文档注释--javadoc的用法

    1.前言 Java中有三种注释方式.前两种分别是 // 和 /* */,主要用于代码的注释,以此来方便代码的可读性.第三种被称作说明注释或文档注释,它以 /** 开始,以 */结束,文档注释允许你在程 ...

  5. Java注释@interface的用法【转】

    Java用  @interface Annotation{ } 定义一个注解 @Annotation,一个注解是一个类.@Override,@Deprecated,@SuppressWarnings为 ...

  6. Java注释@interface的用法

    转---------- java用  @interface Annotation{ } 定义一个注解 @Annotation,一个注解是一个类.@Override,@Deprecated,@Suppr ...

  7. Java注释@interface的用法【转】 --好文章 很好理解

    java用  @interface Annotation{ } 定义一个注解 @Annotation,一个注解是一个类. @Override,@Deprecated,@SuppressWarnings ...

  8. Java Annotation自定义注解详解

    在开发过程中总能用到注解,但是从来没有自己定义过注解.最近赋闲在家,研究整理了一番,力求知其然知其所以然. 本文会尝试描述什么是注解,以及通过一个Demo来说明如何在程序中自定义注解.Demo没有实际 ...

  9. java自定义注释

    一.什么是注释 说起注释,得先提一提什么是元数据(metadata).所谓元数据就是数据的数据.也就是说,元数据是描述数据的.就象数据表中的字段一样,每个字段描述了这个字段下的数据的含义.而J2SE5 ...

随机推荐

  1. OpenCV学习(24) 直方图(1)

    直方图是对数据的统计,并将统计结果分布于一系列预定义的槽中.这里的数据不仅仅指的是灰度值,它可以是任何能有效描述图像特征的数据,比如图像梯度等等. 假设有一个矩阵包含一张图像的信息 (灰度值 0-25 ...

  2. 第三章 类文件结构与javap的使用

    注:本文主要参考自<深入理解java虚拟机(第二版)> 1.javap的使用与类文件结构 使用过程: java源代码: package compile; /** * class字节码 */ ...

  3. mongoDB报错Cannot find module '../build/Release/bson'

    打算用nodejs写一个blog系统,发现nodejs还是存在很多的坑.在使用mongodb时遇到如下报错问题: { [Error: Cannot find module '../build/Rele ...

  4. JavaScript生成GUID的方法

    一.生成GUID的方法一     JScript 代码   复制 function guid() { function S4() { return (((1+Math.random())*0x1000 ...

  5. C++初始化列表和大括号中构造的差别

    C++的对象构造函数有两种初始化的方法: 1.初始化列表 2.大括号中面赋值 这两种推荐使用另外一种.原因在于使用初始化列表仅仅须要进行一次初始化.而使用大括号内赋值的话首先须要调用默认构造函数初始化 ...

  6. Linux下删除相互依赖的包

    今天遇到一个问题,使用RPM 卸载包的时候两个包相互依赖 包A 和包B 卸载A的时候提示需要先卸载B ,反之亦然 经过一番百度 可以在命令后面加参数--nodeps 例如 rpm -e php-jso ...

  7. Win10系统下面的TR1008解决方案

    最近为了体验高大上的Win10系统,于是就把本本原来的Win7旗舰版 升级 到了Win10专业版.之后又在本本上部署了cognos,但是在打开Transform导入IQD数据源的时候就报错了,错误和之 ...

  8. Android actionBar与Fragment结合使用Demo2

    上一篇文章介绍了ActionBar的使用,这里介绍ActionBar的还有一种用法.达到的效果和曾经的GroupActivity或TabHost是一样的,可作为导航来使用. 实现效果图: 源码: 布局 ...

  9. linux可视化桌面安装

    [root@VM_193_201_centos ~]# yum grouplist Loaded plugins: fastestmirror, langpacks There is no insta ...

  10. PHP-7

    PHP 7+ 版本极大地改进了性能,在一些WordPress基准测试当中,性能可以达到PHP 5.6的3倍. PHP 7+ 版本新加特性如下表所示: 序号 内容 1 PHP 标量类型与返回值类型声明 ...