Java提高班--注解

原创 2016年06月01日 14:20:12

注解是一种特殊的接口,为了把注解类型和普通接口类型区分开我们在interface前面添加@符号。

注解其实就在在代码上面添加Tag,注解并不会影响程序的运行。

注解是一种配置机制。

Think in Java中是这样定义注解的:

注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便的使用这些数据。

JavaSE5内置了三种注解,定义在java.lang中:

  • @Override,表示当前的方法定义将覆盖超类中的方法。
  • @Deprecated,表示它注解的元素不推荐使用了,因为它是危险的或者有了更好的实现。
  • @SuppressWarnings,关闭不当的编译器警告信息。
定义注解的时候需要一些元注解(meta-annotation),Java内置了4种元注解,元注解用于注解其他的注解。

@Target 表示该注解用于什么地方,可能的ElementType参数有:
TYPE: 类,接口(包括注解类)或enum声明
FIELD:域声明(包括enum实例)
METHOD:方法声明
PARAMETER:参数声明
CONSTRUCTOR:构造器声明
LOCAL_VARIABLE:局部变量声明
ANNOTATION_TYPE:注解类型声明
PACKAGE:包声明
@Retention 表示需要在什么级别保存该注解信息,可选的RetentionPolicy参数包括:
SOURCE:注解将被编译器丢弃
CLASS:注解在class文件中可用,但会被VM丢弃
RUNTIME:VM将在运行时也保留注解,因此可以通过反射机制读取注解的信息
@Documented 将此注解包含在Javadoc中
@Inherited 允许子类继承父类中的注解

简单的自定义注解:

package com.dusk.annoation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UseCase {
	public int id();

	public String description() default "no description";
}
注解元素的可用类型有:

  • 所有的基本类型
  • String
  • Class
  • enum
  • Annotation
  • 以上类型的数组

操作注解:

注解其实就是类、枚举、方法、类属性上面的一个标记,只要我们能读到这个标记就可以根据自己的实际应用场景进行相应的处理。

最基础的办法是我们使用Java反射包中自带的获取注解的方法来处理。

例如:

类:

java.lang.Class.getAnnotation(Class<A>)

java.lang.Class.getDeclaredAnnotations()

方法:

java.lang.reflect.Method.getAnnotation(Class<T>)

属性:

java.lang.reflect.Field.getAnnotation(Class<T>)

当然也可以使用apt , javac等

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

今天,Java编程周末提高班(第一期)正式结束

Java编程周末提高班(第一期),走过了近两个月历程,一共有68人次到周末到老师家进行Java学习与交流。近距离的和一群年轻的学习接触,收获很多,特别是对以后教学的改进。在学习的闲暇,大家自己做饭,锻...

【JAVA 提高班之一】集合大家族

前言本篇文章转自chenssy的 java提高篇(二十)—–集合大家族,写得不错,转载以记之,我个人觉得一个功力不错的JAVA码工至少熟悉以下几个领域: 不错的抽象的能力(设计模式) 常用数据结构的特...

关于开设《Java编程周末提高班》(第一期)的情况说明

在大学教书3年多,发现部分同学厌学、对专业不感兴趣、大四找工作时非常迷茫。其中部分原因为大一时编程基础没有打好,越到大二、大三、大四,专业课越来越难受,所以就放弃了本专业(IT方面的专业),但在其他感...

《Java编程周末提高班(第一期)》第2天见闻 2014.03.16

315,消费者权益保护日,周末提高班正式开班了。第一天(周六)来了7个大一的学生(今天下课后,一个学生说这周是否可以来早一些,我们规定是早上8:30到我家里,“可以啊,只要不早于6:30就可以了”),...

《Java编程周末提高班(第一期)》写在第二周——在路上…… 2014.03.22

又是周六,今天一共来了8个学生:6个上周六来过的学生,以及两个上周请假第一次来的学生。有进步,下周六可能有9个学生过来,基本上也达到了家里容纳学生学习的最大榕人数(10人)。     总的学习时间在...

Java提高班 之操作Properties

如何从XML中读取属性,以及读取的XML文件有什么写法要求吗? 正如大家所了解的JAVA有两种方法加载java.util.Properties: load() loadFromXML()...

【JAVA 提高班之二】Volatile用法详解

前言volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才...

Java提高班 之深究java.lang.Class.getResource(String)与java.lang.ClassLoader.getResource(String)

package com.dusk.test; import org.junit.Test; public class Client { @Test public void test() { ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java提高班--注解
举报原因:
原因补充:

(最多只允许输入30个字)