Java注解

    xiaoxiao2025-09-13  218

    1、注解

    java中的注解(Annotation),也叫元数据。是Java5以后版本引入的一个特性。

    注解与类、接口、枚举是在同一个层次,可以用来标注包、类、字段、方法、局部变量、方法参数等元素,达到对这些元素的描述和说明

    注解是可以允许jvm在运行中读取它,这一点与注释完全不同。并且包含多种加载策略,可以灵活配置。

    常见的注解:

    @Override

    它用来对覆盖父类方法、实现接口方法进行标记,如果被标记的方法并没有实际覆盖父类方法,则编译器会发出错误警告。

    @Deprecated

    它用来标记过期方法、不推荐使用方法。对于某些已经过期、不推荐使用的方法,但又不能直接删除(有其他地方仍使用),我们会使用@Deprecated进行标记,当使用这些方法时,会在编译时进行提示。

    @SuppressWarnings

    它用来标记不想被提示的警告,警告类型可以通过参数控制,具体如下:

    deprecation,使用了过时的类或方法时的警告

    unchecked,执行了未检查的转换时的警告

    fallthrough,当Switch程序块直接通往下一种情况而没有Break时的警告

    path,在类路径、源文件路径等中有不存在的路径时的警告

    serial,当在可序列化的类上缺少serialVersionUID定义时的警告

    finally,任何finally子句不能正常完成时的警告

    all,关于以上所有情况的警告

    -------------------------------------------------------------------------------------------------------

    自定义注解:

    语法:public @interface 注解名 {定义体} default {默认值}

    使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。

    @interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型。通过default来声明参数的默认值,如果不指定default,则说明该参数为必填。

    注解参数(注解方法的返回值)的只能用public或默认(default)这两个访问权修饰,并且只支持以下数据类型:

    所有基本数据类型(int,float,boolean,byte,double,char,long,short)

    String类型

    Class类型

    enum类型

    Annotation类型

    以上所有类型的数组

    一般是用反射来获取注解。例:

    注解类:

    @Retention(RetentionPolicy.RUNTIME)

    public @interfaceTestAnnotation {

        String name() default "";

    }

    被注解的类:

    public classTestInfo {

        @TestAnnotation(name = "公司名称")

        private String company;

     

        @TestAnnotation(name = "职位")

        private String position;

    }

    使用注解:

    public classTestMain {

        public static void main(String[] args) {

            Field[] fields =TestInfo.class.getDeclaredFields();

            for (Field field : fields) {

                if(field.isAnnotationPresent(TestAnnotation.class)) {

                    TestAnnotation testAnnotation =(TestAnnotation) field.getAnnotation(TestAnnotation.class);

                   System.out.println("field:" + field.getName() + ",annotation:" + testAnnotation.name());

                }

            }

        }

    }

    field:company,annotation:公司名称

    field:position,annotation:职位

    其中注解类中的注解@Retention(RetentionPolicy.RUNTIME),是用来修饰注解的注解,即元注解,用来描述和限定自定义注解的使用场景和约束。

    -------------------------------------------------------------------------------------------------------

    元注解就是负责注解其他注解

    Java 5定义了4个标准的元注解(meta-annotation):@Target、@Retention、@Documented、@Inherited,这些元注解的类在java.lang.annotation包中,具体如下:

    @Target

    @Target说明了注解所修饰的对象范围,即所定义的注解可以用在什么地方。具体的取值有:

    CONSTRUCTOR   用于描述构造器

    FIELD   用于描述类中的属性(域)

    LOCAL_VARIABLE   用于描述局部变量

    METHOD   用于描述方法

    PACKAGE   用于描述包

    PARAMETER   用于描述方法参数

    TYPE   用于描述类、接口(包括注解类型) 或enum声明

    @Retention

    @Retention定义了注解如何被保留,即被描述的注解在什么范围内有效。具体的取值有:

    SOURCE  在源文件中有效(即源文件保留)  

    CLASS   在class文件中有效(即class保留)

    RUNTIME   在运行时有效(即运行时保留)

    我们在《如何自定义注解》文章中的实例中使用了@Retention(RetentionPolicy.RUNTIME),也就是说该自定义注解在运行时能够被读取和使用。

    @Documented

    @Documented定义了注解可以作为公共API,可以被例如javadoc此类的工具文档化。Documented是一个标记注解,并没有任何成员。

    @Inherited

    @Inherited允许子类继承父类的注解。即一个使用了@Inherited修饰的注解被用于某个类,则该类的子类也等同于被该注解修饰。

    参考:http://blog.csdn.net/ooppookid

    转载请注明原文地址: https://ju.6miu.com/read-1302598.html
    最新回复(0)