• Annotation是一种引用数据类型,编译后也是生成xxx.class文件 ```java [修饰符] @interface 注解类型名{

}

/**

  • 自定义注解 */ public @interface MyAnnotation { }
  1. <a name="knZUf"></a>
  2. #### 注解怎么用,用在什么地方
  3. - @注解类型名
  4. - 可以出现在类,属性,方法,变量上,还可以出现在注解上
  5. <a name="UyrVB"></a>
  6. #### JDk内置的注解
  7. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12988934/1620955640044-e7393a4c-deac-4507-b8a3-f1fb6317c194.png#clientId=u55bf509b-7ef9-4&from=paste&height=283&id=ud57ba76e&margin=%5Bobject%20Object%5D&name=image.png&originHeight=283&originWidth=1111&originalType=binary&size=266957&status=done&style=none&taskId=u8f9667f9-e030-41c0-b413-54a1696f347&width=1111)
  8. <a name="jaVOx"></a>
  9. #### 元注解
  10. **用来标注注解的注解称为元注解**
  11. - **Target**
  12. - **用来标注被标注的注解可以出现在哪些位置上**
  13. - **@Taerget(ElcemrntType.METHOD) --可以出现在方法上**
  14. - **@Retention**
  15. - @Retention(RetentionPolicy._RUNTIME_)表示该注解被保存在class文件中,并且可以被反射机制读取
  16. - @Retention(RetentionPolicy._SOURCE_)表示该注解保存在class文件中
  17. - @Retention(RetentionPolicy._CLASS_)表示该注解保存在java源文件中
  18. <a name="HrMMD"></a>
  19. #### 注解中的属性
  20. ```java
  21. public @interface MyAnnotation{
  22. /*
  23. 属性name
  24. */
  25. String name();
  26. String color() default "red";
  27. }
  28. public class MyAnnotationTest01{
  29. @MyAnnotation(name = "test")
  30. public void test(){
  31. }
  32. }
  33. 如果属性名是value,属性名可以不写

属性可以是哪些类型!

  1. public @interface MyAnnotation{
  2. 属性的类型
  3. byte short int long float double boolean char String Class 枚举
  4. 以及以上的数组
  5. }

通过反射获取注解中的内容