codecamp

第17篇-JAVA Annotation 注解

  • 每篇一句 :真的努力后你会发现自己要比想象的优秀很多
  • 初学心得: 怀着一颗奋斗不息的心,一切困苦艰辛自当迎刃而解
  • (笔者:JEEP/711)[JAVA笔记 | 时间:2017-05-17| JAVA Annotation注解 ]

1.什么是注解(Annotation)

Annotation 其实就是代码里的特殊标记, 它用于替代配置文件,也就是说,传统方式通过配置文件告诉类如何运行,有了注解技术后,开发人员可以通过注解告诉类如何运行。在Java技术里注解的典型应用是:可以通过反射技术去得到类里面的注解,以决定怎么去运行类
- Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法
- Annotion(注解)是一个接口,程序可以通过反射来获取指定程序元素的Annotion对象,然后通过Annotion对象来获取注解里面的元数据
- Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。从某些方面看,annotation就像修饰符一样被使用,并应用于包、类 型、构造方法、方法、成员变量、参数、本地变量的声明中

2.基本Annotation


<br> @Override: 限定重写父类方法, 该注解只能用于方法
<br> @Deprecated: 用于表示某个程序元素(类, 方法等)已过时
<br> @SuppressWarnings: 抑制编译器警告
<br> ```

3.自定义Annotation

  • 使用@interface定义Annotation
    - 使用Annotation修饰程序中的类、方法、变量、接口等定义,通常我们会把Annotation放在所有修饰符之前
    - 定义带成员变量的Annotation
    - 为Annotation的成员变量指定初始值

4.提取Annotation信息

  • Annotation接口来代表程序元素前面的注释,该接口是所有Annotation类型的父接口
    - AnnotatedElement接口代表程序中可以接受注释的程序元素
    - 调用AnnotatedElement对象的如下三个方法来访问Annotation信息:
    - getAnnotation(Class<T& annotationClass):返回该程序元素上存在的、指定类型的注释,如果该类型的注释不存在,则返回null
    - Annotation[] getAnnotations():返回该程序元素上存在的所有注释
    - boolean isAnnotationPresent(Class<? extends Annotation& annotationClass):判断该程序元素上是否包含指定类型的注释,存在则返回true,否则返回false

5.Annotation 注解实例

自定义Annotation

import java.lang.annotation.Documented;
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) // 保留时间,一般注解就是为了框架开发时代替配置文件使用,JVM运行时用反射取参数处理,所以一般都为RUNTIME类型
@Documented // 用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化
public @interface OneAnnotation {
// 定义注解的参数,类型可以为基本类型以及String、Class、enum、数组等,default为默认值
String parameter1() default "";
int parameter2() default -1;
}

使用注解

/**
* 一个用到了自定义的注解的类
*/
public class OClass {
@OneAnnotation(parameter1="YES", parameter2=10)
public void oneMethod () {
}
}

获取注解参数

import java.lang.reflect.Method;
public class TestDemo {
public static void main(String[] args) throws Exception {
// 提取到被注解的方法Method,这里用到了反射的知识
Method method = Class.forName("OneClass").getDeclaredMethod("oneMethod");
// 从Method方法中通过方法getAnnotation获得我们设置的注解
OneAnnotation oneAnnotation = method.getAnnotation(OneAnnotation.class);
// 得到注解的俩参数
System.out.println(oneAnnotation.parameter1());
System.out.println(oneAnnotation.parameter2());
}
}

初学(JAVA Annotation注解 高级阶段) 难点: ★★★★★

希望每一篇文章都能够对读者们提供帮助与提升,这乃是每一位笔者的初衷

感谢您的阅读 欢迎您的留言与建议

第16篇-JAVA 类加载与反射
第18完结篇-JAVA XML
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }