【Java】注解

发布时间:2023年12月20日

注解(Annotation)

1、什么是注解

注解的作用:

  • 不是程序本身,但是可以对程序作出解释(这一点跟注释没有什么区别),但是注释没有功能,注解是有功能的
  • 可以被其他程序(编译器等)读取

注解的格式:

  • 以“@注释名”在代码中存在,还可以添加一些参数值,比如:@SuppressWarnings(values="unchecked")

注解的使用位置:

  • 可以在package、class、method、field等上面使用注解,相当于给这些东西添加了额外的辅助信息,可以通过反射机制实现对注解的访问

2、内置注解

内置注解是默认存在于Java中的注解,不是由用户自己开发的注解。内置注解其实非常常见……

  • @Override:定义在java.lang.Override中,此注释只适用于方法,表示一个方法打算重写父类中的另一个方法
  • @Deprecated:定义在 java.lang.Deprecated 中,此注释可以用于方法,属性,类,表示不鼓励程序员使用这样的元素。通常是因为它很危险或者存在更好的选择。
  • @SuppressWarnings:定义在 java.lang.SuppressWarnings 中,用来抑制编译时的警告信息。与前两个注解不同,需要在该注解中添加一个参数(all镇压全部警告、unchecked)才能正确使用,这些参数都是已经定义好的了。(镇压警告?哈哈哈)

3、元注解

元注解的作用就是解释其他注解。Java定义了4个标准meta-annotation类型。这四个类型可以在java.lang.annotation包中找到。(@Target、@Retention、@Documented、@Inherited)。

  • @Target:描述注解的使用范围,即被描述的注解可以使用在哪些地方,声明被注解的注解的作用域
    在这里插入图片描述
    在这里插入图片描述

  • @Retention:表示需要在什么级别保存该注解信息,用于描述注解的生命周期。比如参数中传入一个Runtime,就表示被@Retention注解过的注解在运行时仍然是有效的。

  • @Documented:表示被该注解作用的注解要生成到JavaDoc中。

  • @Inherited:表示被该注解作用的注解B,子类可以继承父类中的注解B。

这些注解的作用、参数都可以点到源码之中查看。

元注解重点需要掌握@Target和@Retention

4、自定义注解

使用 @Interface 可以自定义注解。它会自动继承java.lang.Annotation接口。

@Target(value = {ElementType.METHOD,ElementType.CONSTRUCTOR})
public @interface TestMetaAnnotation{

}

注解中,每一个方法实际上是声明了一个配置参数,方法的名称就是参数的名称,返回值类型就是参数的类型(返回值只能是基本类型:String、enum等)。

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

如果只有一个参数成员,一般将该参数命名为”value“。

package main.test;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

//我们的自定义注解当然可以传入值给参数
@TestMetaAnnotation(name = "xcy")
public class Test {

    //我们的自定义注解参数当然也可以为空,因为有默认值
    //如果没有默认值的话,就一定要给没有默认值的参数传入一个值了
    @TestMetaAnnotation
    public void test(){

    }
}

/**
 * @author xcy
 * 自定义注解,作用域是方法和类,生命周期是运行时
 */
@Target(value = {ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface TestMetaAnnotation{
    //注解的参数,并不是一个方法,默认值是空
    String name() default "123";
    int id() default -1;
}

文章来源:https://blog.csdn.net/weixin_52808620/article/details/135103042
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。