Java中的注解

本文介绍了Java中的注解,包括注解的定义、作用和原理。注解是一种对代码的描述,用于生成文档、跟踪代码依赖性和编译时检查。文章详细讲解了内置注解、元注解和自定义注解,以及它们的使用场景和分类。同时阐述了注解的本质是特殊的接口,通过反射获取。还探讨了如何自定义注解及其保留期、应用范围等。
摘要由CSDN通过智能技术生成


前言:
刚刚开始的新手Java开发者都会分不清注释与注解的区别,总是会混淆。那么注释和注解又有什么样的区别呢?

一、注释

1、定义

给人看的,便于阅读代码,对代码的描述。

2、用法

// :对一句代码句的注释
/**/ :对段代码块的注释
/** */ :文档注释

二、注解Annontation

1、定义

对代码的描述,作为代码形式保留下来。

​ (Annontation像一种修饰符一样,应用于包,类型,构造方法,方法,成员变量,参数以及本地变量 的声明语句中)

2、作用

1、生成文档。这是最常见的,也是java 最早提供的注解。常用的有@param @return 等
2、跟踪代码依赖性,实现替代配置文件功能。比如Spring的注入,未来java开发,将大量注解配置,具有很大用处;
3、在编译时进行格式检查。如@override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出

注解的本质: 特殊的接口

声明注解: 创建了一个特殊接口,通过反射获取注解

使用注解: @注解名(创建注解的一个对象)

3、原理

注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。而我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象$Proxy1。通过代理对象调用自定义注解(接口)的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池

这个运行时生成的动态代理对象是可以导出到文件的,方法有两种

  • 在代码中加入System.setProperty(“sun.misc.ProxyGenerator.saveGeneratedFiles”,
    “true”);
  • 在运行时加入jvm 参数 -Dsun.misc.ProxyGenerator.saveGeneratedFiles=true

4、注解的分类

4.1 内置注解

定义:

jdk定义好这个注解的声明, 开发者直接使用, 语法检查

(1) @Override 检测重写

public class Run1 implements Runnable{
   
    @Override
    public void run() {
   
        System.out.println("重写父类Runnable的run()方法");
    }
}

(2) @Deprecated 已过时, 只是一个标志, 还是能够使用
-在这里插入图片描述

/**
    * This method is deprecated and should not be used because SQL Date
    * values do not have a time component.
    *
    * @deprecated
    * @exception java.lang.IllegalArgumentException if this method is invoked
    * @see #setHours
    */
    @Deprecated //已弃用
    public int getHours() {
   
        throw new java.lang.IllegalArgumentException();
    }

(3) @SuppressWarnings("all") 抑制编译器生成警告信息

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小温豌豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值