美文网首页Java开发那些事
Java基础(二)-注解

Java基础(二)-注解

作者: Stan_Z | 来源:发表于2019-10-23 23:44 被阅读0次
一、注解定义

Java提供的一种源程序中的元素关联任何信息和任何元数据的途径和方法。我把它简单理解为一个标签。
Java SE5.0版本引入该概念。

二、注解介绍

1.JDK注解介绍

注解名 说明
@Override 重写
@Deprecated 过时
@SuppressWarnings(“”) 忽略警告

2.注解语法:

@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Description { 
    String desc();
  
    int age() default 18;
}

3.类定义
使用@interface关键字定义注解

4.成员变量规范

  • 成员类型是受限的,合法类型包括:基本类型及String、Class、Annotation、Enumeration
  • 如果注解只有一个成员变量,则命名必须为value(),在使用时可直接赋值
  • 注解类可以没有成员,没有成员的注解称为标识注解
  • 成员以无参无异常方式声明
  • 可以用default为成员指定一个默认值

5.元注解说明

注解名 作用域 说明
@Target ElementType.ANNOTATION_TYPE 给一个注解进行注解
ElementType.CONSTRUCTOR 构造方法
ElementType.FIELD 属性
ElementType.LOCAL_VARIABLE 局部变量
ElementType.METHOD 方法
ElementType.PACKAGE 包
ElementType.PARAMETER 方法参数
ElementType.TYPE 类、接口、枚举
限制的运行场景,可以多选,以”,”分隔。
@Retention RetentionPolicy.SOURCE 只在源码显示,编译时丢弃
RetentionPolicy.CLASS 编译时记录到class中,运行时丢弃
RetentionPolicy.RUNTIME 运行时存在,可反射读取
生命周期
@Inherited 允许子类继承
@Documented 生成javadoc时会包含注解

6.注解使用

@注解名(成员名1=“成员值1”,成员名2=“成员值2”,...)
@Description(desc = “class annotation")
public class MyClass {
}

7.注解解析
通过反射获取类、函数或成员上的运行时注解信息,实现动态控制程序运行逻辑。

try {
    Class clz = Class.forName("XXX");
    /**
     * 获取类上注解
     */
    //类上是否存在该注解
    boolean isExit = clz.isAnnotationPresent(Description.class);
    if (isExit) {
        //获取注解实例
        Description desc = (Description) clz.getAnnotation(Description.class);
        System.out.println(desc.value());
    }
    /**
     * 获取方法上注解
     */
    Method[] methods = clz.getMethods();
    for (Method method : methods) {
        boolean isMethodExit = method.isAnnotationPresent(Description.class);
        if (isMethodExit) {
            Description desc = (Description) method.getAnnotation(Description.class);
            System.out.println(desc.value());
        }
    }
    //or
    for (Method method : methods) {
        Annotation[] annotations = method.getAnnotations();
        for (Annotation ann : annotations) {
            if(ann instanceof Description){
                Description d = (Description) ann;
                System.out.println(d.value());
            }
        }
    }
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

相关文章

网友评论

    本文标题:Java基础(二)-注解

    本文链接:https://www.haomeiwen.com/subject/wsblvctx.html