注解Annotation

1、什么是注解

  • Annotation 从JDK5.0开始引入

  • Annotation 作用:不是程序本身,可以对程序作出解释,可以被其他程序(编译器)读取,通过反射读取

  • Annotation 格式:@注释名 可以添加参数值

  • 注解在哪里使用:可以添加在package,class,method,field等上面,相当于添加了额外的信息,通过反射机制进行编程来实现对这些元数据的访问

2、内置注解

  • @Override :定义在java.lang.Override中。检查该方法是否是重写方法,没有重写会报编译错误。只适用于修饰方法。

  • @Deprecated :定义在java.lang.Deprecated中。标记过时方法,不鼓励程序员使用,因为危险或存在更好的选择。如果使用该方法,会报编译警告。

  • @SuppressWarnings :定义在java.lang.SuppressWarnings中。抑制编译时的警告信息。该注释需要添加参数。

    • @SuppressWarnings("all")
    • @SuppressWarnings("unchecked")
    • @SuppressWarnings(value={"unchecked","deprecation"})
    package com.company.annotation;
    
    @SuppressWarnings("all")
    public class test01 {
    
        @Override
        public String toString() {
            return super.toString();
        }
    
        @Deprecated
        public static void test(){
            System.out.println("Deprected");
        }
    
        public static void main(String[] args) {
            test();
        }
    }
    

3、元注解

元注解的作用是负责注解其他注解,Java定义了4个标准的meta-annocation类,对其他annocation类型作说明,在java.lang.annotation中可以找到。

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

4、自定义注解

  • 使用 @interface 自定义注解时,自动继承了java.lang.Annotation接口。
  • 分析:
    • @interface用来声明一个注解,格式:@interface 注解名 {定义内容}
    • 其中的每一个方法实际上是声明了一个配置参数
    • 方法的名称就是参数的名称
    • 返回值的类型就是参数的类型,返回值只能是基本类型class、String、enum
    • 可以通过default来声明默认的参数值
    • 如果只有一个参数,一般参数名为value
    • 注解元素必须要有值,我们定义注解时一般使用空字符串或0作为默认值
package com.company.annocation;

import java.lang.annotation.*;

public class test02 {
    //注解没有默认值,必须给注解赋值
    @MyAnnotation(name = "123")
    public void test() {

    }

    //如果只有一个参数,一般参数名为value
    @MyAnnotation2("123")
    public void test2() {

    }
}

//定义一个注解

//Target 表示我们的注解可以用在哪些地方
@Target(value = {ElementType.METHOD, ElementType.TYPE})

//Retention 表示我们的注解在什么地方有效
@Retention(value = RetentionPolicy.RUNTIME)

//Documented 表示将注解生成在JAVAdoc中
@Documented

//Inherited 子类可以继承父类的注解
@Inherited
@interface MyAnnotation {
    //注解的参数:参数类型+参数名()
    String name();
    int age() default 0;
    int id() default -1; //如果默认值为-1,代表不存在

    String[] schools() default {"YSU","BJU"};
}

@Target(value = {ElementType.METHOD, ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
@interface MyAnnotation2 {
    String value();
}
posted @ 2021-03-03 13:41  又又又8  阅读(82)  评论(0编辑  收藏  举报