Day7 Java 注解
uwupu 啦啦啦啦啦

Annotation注解

Annotation是JDK5.0引入的技术

作用

  • 对程序进行解释
  • 可以被编译器读取

格式

  • 以“@注释名”在代码中存在,也可以添加一些参数值,

    • 如:@SuppressWarnings(value=”unchecked”)

    • @Override 重写方法的注解

    • ```java
      class MyThread implements Runnable{

      @Override//注解
      public void run() {
      
      }
      

      }

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56

      ## 一些内置注解

      - @Override,java.lang.Override。表示一个方法声明打算重写超累中另一个方法声明。
      - @Deprecated,java.lang.Deprecated。表示不鼓励程序员使用这样的元素或者有更好的方式,但是可以使用。
      - @SuppressWarnings,java.lang.SuppressWarnings。用来抑制编译时的警告信息。
      - 参数:
      - @SuppressWarnings("all")
      - 等...

      ## 元注解

      作用:负责注解其他注解。

      Java顶一个4个标准的meta-annotation,用来提供对其他annotation类型做说明。

      位于`java.lang.annotation`

      有以下几种:

      - @Target 用于描述注解的使用范围。(被描述的注解可以用在什么地方)
      - @Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期。
      - (SOURCE < CLASS < RUNTIME)
      - @Document:说明该注解将被包含在Javadoc中。
      - @Inherited:说明子类可以继承父类中的该注解。

      示例:

      ```java
      @MyAnnoation
      //类 TYPE
      public class Demo2_MetaAnnoation {
      @MyAnnoation
      //方法 METHOD
      public void Test(){
      @MyAnnoation
      int a;//局部变量 LOCAL_VARIABLE

      }
      }


      //定义一个注解
      //可以用在 类,方法,局部变量中
      @Target(value = {ElementType.TYPE,ElementType.METHOD,ElementType.LOCAL_VARIABLE})

      //表示注解在什么地方有效
      //运行时
      @Retention(value = RetentionPolicy.RUNTIME)
      // 出现在JavaDoc中
      @Documented
      //子类可以继承父类的注解
      @Inherited
      @interface MyAnnoation{

      }

自定义注解

使用@interface自定义注解,自动继承java.lang.Annotation接口

格式:public @interface 注解名{定义内容}

  • 定义内容中一个方法指一个配置参数

  • 返回值类型就是参数的类型,只能是Class,String,enum。

  • 可以通过default来声明参数的默认值。

  • 注解元素必须要有值。

  • 只有一个值时,一般用value()表示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Demo3_CustomAnnotation {
@MyAnnotation2(name = "zhangsan",//name为zhangsan。参数age有默认值,可以不写。
say = {"小张","小兰"}//可以有数组
)
@MyAnnotation3("只有一个参数")
public void test(){

}
}

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation2{
//注解的参数
//参数类型 + 参数名
String name();//没有默认值一定要传值
int age() default 0;//有默认值,可以不传值

String[] say() default {"张三","李四","王五","赵六"};//这是一个数组参数

}

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation3 {
String value();//若注解只有一个参数 只需要一个value就可。
}

注解在哪里使用

可以附加在package,class,method,field上面,相当于给他们添加了额外的辅助信息。

可以通过反射机制编程实现对这些元数据的访问。

 评论