Java 中注解的详细介绍及使用

这篇具有很好参考价值的文章主要介绍了Java 中注解的详细介绍及使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java 注解,也称为 Java Annotations,是一种元数据(Meta-data)标记语言,它在 Java 代码中添加了额外的信息和说明。注解可以用于类、方法、变量、参数、包等各种程序成分上,以达到不同的应用场景。

Java 注解是从 Java 5 开始引入的,在当时就被广泛认为是 Java 语言一个非常重要的新特性之一。Java 注解通常使用 @ 符号进行声明,其基本语法如下:

@<AnnotationName>(<AttributeValue>)

其中,AnnotationName 是注解的名称,AttributeValue 则是注解的属性值。注解可以没有属性,此时括号中的内容可以省略。

自定义注解的语法与定义接口类似,需要使用 @interface 关键字进行声明。例如:

public @interface MyAnnotation {
    String value();
}

上述代码定义了一个名为 MyAnnotation 的注解,并定义了一个名为 value 的属性,其返回类型为 String

当我们定义一个注解时,可以使用元注解(Meta-annotation)来指定注解的生命周期、作用范围等属性。以下是几个常见的元注解:

  • @Retention:指定注解的生命周期。可选值有三种:SOURCECLASSRUNTIME。其中,SOURCE 表示该注解只存在于源代码中,在编译后被丢弃;CLASS 表示该注解在编译后会被保留在 class 文件中,但是在运行时无法获取;RUNTIME 表示该注解在运行时可以被反射机制获取到,默认值为 CLASS
  • @Target:指定注解的作用范围。可选值包括 ANNOTATION_TYPECONSTRUCTORFIELDLOCAL_VARIABLEMETHODPACKAGETYPE。其中,TYPE 表示该注解可以用于类、接口和枚举上。
  • @Documented:指定该注解是否包含在 JavaDoc 文档中。
  • @Inherited:指定该注解能否被子类继承。

接下来,我们通过一个具体的示例来说明如何定义和使用注解。

假设我们要为一个类添加日志输出功能。首先,我们可以定义一个 @Log 注解,用于标记需要输出日志的方法:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
    String value() default "";
}

上述代码中,我们使用了 @Target@Retention 元注解来指定了 @Log 注解的作用范围和生命周期。此外,我们还定义了一个名为 value 的属性,其默认值为空字符串。

接下来,我们可以在需要输出日志的方法上添加 @Log 注解,并传入具体的日志信息:

public class MyClass {
    @Log("start my method")
    public void myMethod() {
        // do something
    }
}

在上述代码中,我们为 myMethod 方法添加了 @Log 注解,其中传入了具体的日志信息。

最后,我们使用反射机制来获取并处理 @Log 注解:

MyClass obj = new MyClass();
Method method = obj.getClass().getMethod("myMethod");

if (method.isAnnotationPresent(Log.class)) {
    Log log = method.getAnnotation(Log.class);
    System.out.println(log.value());
}

在上述代码中,我们首先创建了 MyClass 类的实例 obj,然后通过 getClass() 方法获取其对应的 Class 对象。接着,我们使用 getMethod() 方法获取 myMethod 方法的 Method 对象,并判断其是否存在 @Log 注解。如果存在,我们使用 getAnnotation() 方法获取 @Log 注解对象,并输出其中的日志信息。

通过上述示例,我们可以看出注解在 Java 代码中的应用非常灵活,可以满足很多特殊需求。例如,我们可以通过自定义注解为某些方法添加事务支持、权限校验等功能,在实际的开发中具有很大的应用价值。

Java 中内置的注解非常多,以下是其中常用的几个注解及其作用:文章来源地址https://www.toymoban.com/news/detail-437626.html

  • @Override:标记方法重写父类中的方法。如果该注解被用在一个没有重写父类方法的方法上就会导致编译错误。
  • @Deprecated:标记某个程序元素(类、方法等)已过时,通常是由于它不再安全或有效,建议不要再使用它。
  • @SuppressWarnings:抑制编译器警告信息。该注解可以用于类、方法、变量等任何程序成分上,以屏蔽指定类型的编译器警告。
  • @FunctionalInterface:标记接口为函数式接口。函数式接口是只具有一个抽象方法的接口,在 Java 8 中引入了 Lambda 表达式后,函数式接口得到了广泛应用。
  • @SafeVarargs:标记方法是类型安全的可变参数方法,即保证方法不会对传入的可变参数数组进行不安全的操作。
  • @SuppressWarnings:抑制编译器警告信息。该注解可以用于类、方法、变量等任何程序成分上,以屏蔽指定类型的编译器警告。
  • @FunctionalInterface:标记接口为函数式接口。函数式接口是只具有一个抽象方法的接口,在 Java 8 中引入了 Lambda 表达式后,函数式接口得到了广泛应用。
  • @SafeVarargs:标记方法是类型安全的可变参数方法,即保证方法不会对传入的可变参数数组进行不安全的操作。
  • @SuppressWarnings:抑制编译器警告信息。该注解可以用于类、方法、变量等任何程序成分上,以屏蔽指定类型的编译器警告。
  • @FunctionalInterface:标记接口为函数式接口。函数式接口是只具有一个抽象方法的接口,在 Java 8 中引入了 Lambda 表达式后,函数式接口得到了广泛应用。
  • @SafeVarargs:标记方法是类型安全的可变参数方法,即保证方法不会对传入的可变参数数组进行不安全的操作。
  • @SuppressWarnings:抑制编译器警告信息。该注解可以用于类、方法、变量等任何程序成分上,以屏蔽指定类型的编译器警告。
  • @FunctionalInterface:标记接口为函数式接口。函数式接口是只具有一个抽象方法的接口,在 Java 8 中引入了 Lambda 表达式后,函数式接口得到了广泛应用。
  • @SafeVarargs:标记方法是类型安全的可变参数方法,即保证方法不会对传入的可变参数数组进行不安全的操作。

到了这里,关于Java 中注解的详细介绍及使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 七、Sentinel的注解@SentinelResource详细介绍

    Sentinel 提供了 @SentinelResource 注解用于定义资源,并提供了 AspectJ (切面)的扩展用于自动定义资源、处理 BlockException 等。 注意:注解方式埋点不支持 private 方法。 @SentinelResource 用于定义资源,并提供可选的异常处理和 fallback 配置项。 @SentinelResource 注解包含以下属性: va

    2024年02月13日
    浏览(40)
  • Java反射使用的详细介绍

    反射概述 : 反射认为类的每一个成份都是一个对象, 对于任何一个Class类,在\\\"运行的时候\\\"都可以直接得到这个类全部成分。 在运行时,可以直接得到这个类的构造器对象: Constructor 在运行时,可以直接得到这个类的成员变量对象: Field 在运行时,可以直接得到这个类的成员方法

    2024年02月05日
    浏览(37)
  • Java IO流 - 打印流详细使用介绍

    打印流基本使用 打印流 : 作用:打印流可以 实现更方便、更高效的打印数据到文件中去 。打印流一般是指:PrintStream,PrintWriter两个类。 可以实现 打印什么数据就是什么数据 ,例如打印整数97写出去就是97,打印boolean的true,写出去就是true。 打印流PrintStream构造器如下 : 构

    2024年02月02日
    浏览(43)
  • 详细分析Java中的@JsonFormat注解和@DateTimeFormat注解

    下文中涉及MybatisPlus的逻辑删除的知识,可看我之前这篇文章:详细讲解MybatisPlus实现逻辑删除 对应的Navicat设置数据库最新时间可看我这篇文章:Navicat 设置时间默认值(当前最新时间) 为了使 @JsonFormat 生效,项目必须引入 Jackson 库的相关依赖: (如果是springboot项目,可不

    2024年01月23日
    浏览(39)
  • Java IO流 - 缓冲流的详细使用介绍

    缓冲流概述 缓冲流介绍 : 缓冲流也称为高效流、或者高级流。之前学习的字节流和字符流可以称为原始流。 作用:缓冲流自带缓冲区、可以提高原始字节流、字符流读写数据的性能 缓冲流分为: 字节缓存输入流、字节缓冲输出流、字符缓冲输入流、字符缓冲输出流 字节缓冲

    2024年02月01日
    浏览(33)
  • 【Java中的Thread线程的简单方法介绍和使用详细分析】

    提示:若对Thread没有基本的了解,可以先阅读以下文章,同时部分的方法已经在如下两篇文章中介绍过了,本文不再重复介绍!! 【Java中Tread和Runnable创建新的线程的使用方法】 【Java中的Thread线程的七种属性的使用和分析】 提示:以下是本篇文章正文内容,下面案例可供参

    2024年02月15日
    浏览(39)
  • Spring(18) @Order注解介绍、使用、底层原理

    @Order :是 spring-core 包下的一个注解。@Order 作用是 定义 Spring IOC 容器中 Bean 的执行顺序 。 注意: Spring 的 @Order 注解或者 Ordered 接口,不决定 Bean 的加载顺序和实例化顺序,只决定 Bean 注入到 List 中的顺序。 @Order 注解接受一个整数值作为参数, 数值越小表示优先级越高 。

    2024年02月20日
    浏览(37)
  • Spring Cache的介绍以及使用方法、常用注解

    Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能. Spring Cache提供了一层抽象,底层可以切换不同的cache实现。具体就是通过CacheManager接口来统一不同的缓存技术。 CacheManager是Spring提供的各种缓存技术抽象接口。 针对不同的缓存

    2024年02月16日
    浏览(37)
  • Spring Boot中@RabbitHandler注解的介绍、原理和使用

    在RabbitMQ中,消息的消费者需要根据不同的消息类型进行不同的处理。在Spring Boot中,我们可以通过 @RabbitHandler 注解来实现这一功能。本文将介绍Spring Boot中 @RabbitHandler 注解的介绍、原理和使用方法。 @RabbitHandler 注解是Spring AMQP提供的一种消费消息的方式。通过在消息监听方

    2024年02月09日
    浏览(35)
  • Spring注解 @EventListener 的介绍与使用示例以及异常处理

    用途 将一个方法标记为监听器,用于监听应用程序事件,事件可以是 ApplicationEvent 实例,也可以是其他任意的对象。 如果一个监听器(被标注的方法)只支持单一的事件类型,那么该方法可以声明一个唯一的参数用来反映要监听的事件类型。 如果一个监听器(被标注的方法

    2024年01月15日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包