注解

一,注解快速入门

注解:就是Java代码里的特殊标记,比如:@Override、@Test等

作用是:让其他程序根据注解信息来决定怎么执行该程序

注意:注解可以用在类上、构造器上、方法上、成员变量上、参数上、等位置处。

自定义注解:

public @interface 注解名{
    public 属性类型 属性名() default 默认值;
}

注解用法:

public @interface TestEnum {
    public String name() default "测试";
}
import Enum.TestEnum;
@TestEnum(name="123")
public class EnumDemo {
    
}

特殊属性名:value

  • 如果注解中只有一个value属性,使用注解时,value名称可以不写
  • 如果注解中有多个属性,除了value属性其他属性都有默认值,使用注解时,value名称可以不写

二,注解的原理

image-20240608103217976

三,元注解

元注解:修饰注解的注解

常见的元注解:

image-20240608104020769

四,注解的解析

注解的解析:就是判断类上、方法上、成员变量上是否存在注解,并把注解里的内容给解析出来
指导思想:

  • 要解析谁上面的注解,就应该先拿到谁
  • 要解析类上面的注解,则应该先获取该类的Class对象,再通过Class对象解析其上面的注解
  • 解析成员方法上的注解,则应该获取到该成员方法的Method对象,再通过Method对象解析其上面的注解
  • Class、Method、Field,Constructor、都实现了AnnotatedElement接口,它们都拥有解析注解的能力。

image-20240608104223596

代码举例:

//注解
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface TestEnum {
    int value();
    String name() default "测试";
}
//添加上注解的类
@TestEnum(value = 1, name="2")
public class EnumDemo {
    @TestEnum(value =2, name="2")
    public void method(){    
    }
}
//测试类
import org.junit.Test;
import Enum.TestEnum;
public class EnumDemo {
    @Test
    public void parseEnum() {
        //1.先获取到对象
        Class testEnumClass = TestEnum.class;
        //2.判断类上是否有该注解
        if (testEnumClass.isAnnotationPresent(TestEnum.class)) {
            //3.获取注解
            TestEnum testEnum = (TestEnum) testEnumClass.getAnnotation(TestEnum.class);
            //4.获取参数
            int value = testEnum.value();
            String name = testEnum.name();
        }
    }
}
posted @ 2024-06-23 13:47  wdadwa  阅读(2)  评论(0)    收藏  举报