注解

作者: Java酸不酸 | 来源:发表于2018-05-13 11:04 被阅读2次

jdk中三种常见的注解:(注解与类、接口平级存在)

  1. Override:用于描述方法重写,描述该方法是从父类继承的
  2. SuppressWarnings:压制警告的意思
  3. Deprecated:用于描述方法过期了

注解属性的类型可以是哪些?

  1. 基本数据类型都可以:byte、short、int、long、float、double、char、boolean
  2. String
  3. 注解类型
  4. Class类型
  5. 枚举类型
  6. 以上类型的一维数组
@Retention(value = RetentionPolicy.RUNTIME)
public @interface MyAnnotation02 {
    String str();
    int num() default 10;
    MyAnnotation01 anno();
    Class clazz();
    Color color();
    String[] value();
}

使用注解

如果使用的那个注解有注解属性,那么使用的时候就要为这些注解属性赋值。

@MyAnnotation02(anno = @MyAnnotation01, clazz = TestAnno03.class, color = Color.GREEN, str = "qwe", value = { "asd" })
public class TestAnno03 {
    @MyAnnotation03(value = "qwe")
    public String name = "张三";
    
    @MyAnnotation03(value = "qwe")
    public TestAnno03() {
    }
    
    @MyAnnotation03(value = "qwe")
    @MyAnnotation01
    public void fn1(){
        @MyAnnotation03(value = "qwe")
        int num = 20;
    }
}

元注解就是定义在注解上的注解

  • @ Target:表示该注解能使用在什么东西上面

    • 如果取值为:METHOD表示可以用在方法上,TYPE表示可以用在类、接口、注解、枚举上
    • LOCAL_VARIABLE表示可以用在局部变量上,
    • FIELD表示可以用在成员变量上
    • CONSTRUCTOR表示能够用在构造函数上
  • @ Retention:表示该注解保留到什么阶段

    • SOURCE:源码阶段
    • CLASS:编译阶段
    • RUNTIME:运行阶段
@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = { ElementType.METHOD,ElementType.TYPE,ElementType.LOCAL_VARIABLE,ElementType.FIELD,ElementType.CONSTRUCTOR })
public @interface MyAnnotation03 {
    String value();
}

解析注解

  • 获取TestAnno03类上的所有注解 -> Annotation[]
// 获取该类字节码文件对象,Class类实现了AnnotatedElement接口,所以就有该接口的的那四个方法
Class<?> clazz = Class.forName("com.itheima.annotation.meta.TestAnno03");
Annotation[] annotations = clazz.getAnnotations();
  • 判断name成员变量上有没有@MyAnnotation03注解 -> boolean
// 获取字节码文件对象
Class<?> clazz = Class.forName("com.itheima.annotation.meta.TestAnno03");
// 获取所有的字段
Field field = clazz.getField("name");
boolean flag = field.isAnnotationPresent(MyAnnotation03.class);
System.out.println(flag);
  • 获取fn1方法上的MyAnnotation01注解的对象
Class<?> clazz = Class.forName("com.itheima.annotation.meta.TestAnno03");
//获取fn1方法
Method method = clazz.getMethod("fn1");
        
MyAnnotation01 annotation = method.getAnnotation(MyAnnotation01.class);
System.out.println(annotation);

相关文章

  • 注解学习笔记

    什么是注解注解分类注解作用分类 元注解 Java内置注解 自定义注解自定义注解实现及使用编译时注解注解处理器注解处...

  • 注解与反射

    注解 声明一个注解类型 元注解 在定义注解时,注解类也能够使用其他的注解声明。对注解类型进行注解的注解类,我们称之...

  • 1.8 Java 注解annotation

    1.1 注解声明 Java注解Annotation,有声明注解和元注解 元注解:Java提供的元注解,所谓元注解就...

  • 注解的使用

    元注解 注解 注解本质就是接口: 元注解:修饰注解的注解 自定义注解 Text.java FruitName.ja...

  • 注解

    Java注解 注解 元注解 自定义注解 元注解:负责注解其他注解 共有4个标准的meta-annotation类型...

  • Spring高级应用之组合注解和元注解

    1.核心概念: 元注解:可以注解在其他注解上的注解;被注解的注解成为组合注解; 2.组合注解的定义步骤 定义组合注...

  • 2016.10.13-关于注解的自定义和注解的解析

    注解可以分为:1、标识性注解(没有成员变量) 2、注解 3、元注解(注解的注解) 1、注解的自定义 自定义注解的格...

  • 自定义注解

    注解分类 1、代码注解2、编译时注解3、运行时注解 注解范例 使用注解的类 注解解析类 注解实战 需求1、有一张用...

  • 【JAVA】注解

    元注解 用来定义、声明注解的注解。 @Inherited注解 使用此注解声明出来的自定义注解,在使用此自定义注解时...

  • Spring Boot常用注解

    注解速览 配置加载相关 Bean 声明注解 Bean 注入注解 SpringMVC 注解 MyBatis 注解 配...

网友评论

    本文标题:注解

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