从01开始 从01开始
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)

peterjxl

人生如逆旅,我亦是行人
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)
  • JavaSE

  • JavaSenior

    • 反射

    • 注解

      • 什么是注解
      • 注解的本质
        • ​@Override​
      • 自定义注解
      • 元注解
      • 注解练习
      • 注解小结
    • 集合类

    • Java
  • JavaEE

  • JavaWeb

  • Spring

  • 主流框架

  • SpringMVC

  • SpringBoot

  • Java并发

  • Java源码

  • JVM

  • 韩顺平

  • Java
  • Java
  • JavaSenior
  • 注解
2022-12-30
目录

注解的本质

# 01.注解的本质

在继续讲注解之前,我们想看看注解的本质

 ‍

# ​@Override​

例如查看@Override​的注解源码:可以在IDE里按住Ctrl键后 点击@Override

package java.lang;

import java.lang.annotation.*;

/**
 * Indicates that a method declaration is intended to override a
 * method declaration in a supertype. If a method is annotated with
 * this annotation type compilers are required to generate an error
 * message unless at least one of the following conditions hold:
 *
 * <ul><li>
 * The method does override or implement a method declared in a
 * supertype.
 * </li><li>
 * The method has a signature that is override-equivalent to that of
 * any public method declared in {@linkplain Object}.
 * </li></ul>
 *
 * @author  Peter von der Ahé
 * @author  Joshua Bloch
 * @jls 9.6.1.4 @Override
 * @since 1.5
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

‍

可以看到一个注解可以分为两部分:

  1. 元注解:@Target(ElementType.METHOD)、@Retention(RetentionPolicy.SOURCE)。元注解我们后续再说。
  2. 注解的定义:public @interface 注解名称
//元注解
public @interface 注解名称{
	属性列表;
}
1
2
3
4

‍

那个一个注解,本质上到底是什么呢?我们可以看注解被编译后,其内容是什么。

‍

首先仿照@Override的格式,我们也自定义一个注解:

public @interface MyAnno { 

}
1
2
3

这就是最简单的一个注解了,可以用@MyAnno来使用(目前啥功能都没,我们后续再加)

‍

在命令行里编译下

javac MyAnno.java
1

‍

‍

然后用javap反编译:

javap MyAnno   
Compiled from "MyAnno.java"
public interface MyAnno extends java.lang.annotation.Annotation {}
1
2
3

可以看到,注解本质上就是一个接口,该接口默认继承Annotation接口,理论上接口能定义什么,注解就能定义什么。

‍

‍

‍

在GitHub上编辑此页 (opens new window)
上次更新: 2022/12/30 19:55:27
什么是注解
自定义注解

← 什么是注解 自定义注解→

Theme by Vdoing | Copyright © 2022-2023 粤ICP备2022067627号-1 粤公网安备 44011302003646号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式