鱼C论坛

 找回密码
 立即注册
查看: 136|回复: 1

请生动形象、完整细致地讲解一下Java中注解的用法和语法规则,要求条分缕析。

[复制链接]
发表于 2025-4-2 22:05:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
尤其是元注解:
@Target
@Retention
@Inherited
@Documented
@Repeatable
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-4-2 22:06:42 | 显示全部楼层
Java注解(Annotation)详解

注解(Annotation)是Java中用于添加元数据的特殊语法,相当于代码的标签。下面通过语法规则元注解应用场景三部分展开说明:

一、基本语法
  • 定义注解:

    1. public @interface 注解名称 {
    2.     数据类型 属性名() default 默认值; // 类似接口方法
    3. }
    复制代码

  • 使用示例:

    1. @MyAnnotation(name = "示例", version = 1)
    2. public class Demo {}
    复制代码



二、核心元注解
这些注解用于修饰其他注解的定义:

  • @Target:指定注解作用目标

    1. @Target(ElementType.METHOD) // 只能标注方法
    2. public @interface TestAnnotation {}
    复制代码

    支持的ElementType类型:
    • TYPE(类/接口/枚举)
    • FIELD(字段)
    • METHOD(方法)
    • PARAMETER(参数)
    • CONSTRUCTOR(构造器)
    • LOCAL_VARIABLE(局部变量)
    • ANNOTATION_TYPE(注解)
    • PACKAGE(包)

  • @Retention:控制注解生命周期

    1. @Retention(RetentionPolicy.RUNTIME) // 运行时可见
    2. public @interface RuntimeAnnotation {}
    复制代码

    策略说明:
    • SOURCE:仅源码保留(如@Override)
    • CLASS:编译后保留(默认值)
    • RUNTIME:运行时可通过反射读取

  • @Inherited:允许子类继承父类注解

    1. @Inherited
    2. @Retention(RetentionPolicy.RUNTIME)
    3. public @interface InheritableAnnotation {}
    复制代码

  • @Documented:使注解出现在Javadoc中

    1. @Documented
    2. public @interface DocAnnotation {}
    复制代码

  • @Repeatable:允许重复标注(需容器注解)

    1. @Repeatable(Fish.class)
    2. public @interface FishFood {
    3.     String value();
    4. }

    5. public @interface Fish {
    6.     FishFood[] value();
    7. }

    8. // 使用示例
    9. @FishFood("虾米")
    10. @FishFood("海藻")
    11. public class Aquarium {}
    复制代码



三、典型应用场景
  • 编译检查:@Override、@Deprecated
  • 框架配置:Spring的@Autowired
  • 代码生成:Lombok的@Data
  • 单元测试:JUnit的@Test


四、反射读取注解示例

  1. Class<Demo> clazz = Demo.class;
  2. if(clazz.isAnnotationPresent(MyAnnotation.class)){
  3.     MyAnnotation annotation = clazz.getAnnotation(MyAnnotation.class);
  4.     System.out.println("Name: " + annotation.name());
  5. }
复制代码


提示:合理使用注解可以使代码更简洁,但要避免过度设计。元注解就像注解的基因,决定了注解的基础特性。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-10 02:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表