码迷,mamicode.com
首页 > 编程语言 > 详细

Java注解基本介绍

时间:2019-01-18 22:30:04      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:edm   利用   信息   long   结合   esc   enum   ada   cat   

注解(Annotation),又称元数据(MetaData),提供了一种在代码中添加信息的形式化的方法,将元数据和源代码结合在一起

外部配置文件如XML存在的问题:

  • 代码复杂度较高,需要编写很多重复信息,如包名和全类名,而这些信息在源文件中都已经存在了。
  • 可能需要同时维护源文件和XML,如添加了新的注入对象,可能导致代码同步问题。
  • 要求程序员了解如何编写XML文件。

    使用注解则只需要在代码源文件中进行编写维护简单的注解标识,而其它信息都能从这个源文件获取到。

Java内置注解

  • 标准注解:
    1. @Override:用于方法上,表示当前方法覆盖了父类的方法,若方法签名与父类的不同,则编译器会发出错误提示。
    2. @Deprecated:声明的类、方法等是被废弃的,使用它编译器会发出警告信息。
    3. @SuppressWarnings:忽略警告信息,在使用了如@Deprecated等注解标明的不正常的元素时,可以使用此注解忽略,谨慎使用。
  • 元注解:
    1. @Target:注解可以用于什么地方,不声明则用于任何地方,可选的数组参数如下:
      • ElementType.TYPE:类、接口、枚举或注解类型
      • ElementType.FIELD:域声明
      • ElementType.METHOD:方法声明
      • ElementType.PARAMETER:参数声明
      • ElementType.CONSTRUCTOR:构造器声明
    2. @Retention:注解的保存级别,可选的参数如下:
      • RetentionPolicy.SOURCE:源码级别,只在源码中存在,编译后就消失了
      • RetentionPolicy.CLASS:class文件级别,编译后的class文件中仍然存在,但运行时会消失
      • RetentionPolicy.RUNTIME:运行时级别,运行时仍然存在,即会一直存在
    3. @Documented:将此注解包含在 Javadoc 中。
    4. @Inherited:允许子类继承父类中的注解。A使用了此注解,B继承A,则B也认为使用了此注解。

注解基本语法

定义:类似于接口,使用 @interface,定义注解时,一般需要使用一些元注解,如@Target、@Retention。注解不支持继承。

注解元素:注解中一般都会包含一些元素来表示值,注解元素就像是接口的方法,唯一的区别就是可以指定默认值,没有元素的注解称为标记注解,就像一个空的接口一样。

注解元素可以使用的类型包括:

  • 基本数据类型如int、long、double、boolean等
  • String
  • Class类
  • enum枚举
  • Annotation注解本身
  • 以上类型的数组

注解元素要么在定义时指定默认值,要么在使用时指定,不允许有不确定的值,不允许为null。

注解元素在使用时使用 key-value 的形式指定,置于注解声明后的括号中,数组使用k={v1,v2}的形式指定。

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

public class AnnotationTest {
    @AnnotationCase(id = 1)
    public String test(){}

    @AnnotationCase(id = 2, descr = "test2")
    public boolean test2() {}
}

为什么使用注解

使用注解能够极大地简化配置文件的开发,我们可以编写自己的注解处理器,利用反射工具处理注解,甚至于完全代替配置文件。

public static void main(String[] args) {
    // 获取 Class 对象
    Class clazz = AnnotationTest.class;
    // 获取 Method 对象
    Method method = clazz.getDeclaredMethods()
    // 获取方法上的 @AnnotationCase 注解标识
    AnnotationCase ac = method.getAnnotation(AnnotationCase.class);
    if(null != ac) {
        System.out.println(ac.id() + " : " + ac.descr());
    }
}

Java注解基本介绍

标签:edm   利用   信息   long   结合   esc   enum   ada   cat   

原文地址:https://www.cnblogs.com/mabaoqing/p/10289918.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!