当在Java源程序上加了一个注解,这个Java源程序要由javac去编译,javac把java源文件编译成.class文件,在编译成class时可能会把Java源程序上的一些注解给去掉,java编译器(javac)在处理java源程序时,可能会认为这个注解没有用了,于是就把这个注解去掉了,那么此时在编译好的class中就找不到注解了, 这是编译器编译java源程序时对注解进行处理的第一种可能情况,假设java编译器在把java源程序编译成class时,没有把java源程序中的注解去掉,那么此时在编译好的class中就可以找到注解,当程序使用编译好的class文件时,需要用类加载器把class文件加载到内存中,class文件中的东西不是字节码,class文件里面的东西由类加载器加载到内存中去,类加载器在加载class文件时,会对class文件里面的东西进行处理,如安全检查,处理完以后得到的最终在内存中的二进制的东西才是字节码,类加载器在把class文件加载到内存中时也有转换,转换时是否把class文件中的注解保留下来,这也有说法,所以说一个注解的生命周期有三个阶段:java源文件是一个阶段,class文件是一个阶段,内存中的字节码是一个阶段,javac把java源文件编译成.class文件时,有可能去掉里面的注解,类加载器把.class文件加载到内存时也有可能去掉里面的注解,因此在自定义注解时就可以使用Retention注解指明自定义注解的生命周期,自定义注解的生命周期是在RetentionPolicy.SOURCE阶段(java源文件阶段),还是在RetentionPolicy.CLASS阶段(class文件阶段),或者是在RetentionPolicy.RUNTIME阶段(内存中的字节码运行时阶段),根据JDK提供的API可以知道默认是在RetentionPolicy.CLASS阶段当在Java源程序上加了一个注解,这个Java源程序要由javac去编译,javac把java源文件编译成.class文件,在编译成class时可能会把Java源程序上的一些注解给去掉,java编译器(javac)在处理java源程序时,可能会认为这个注解没有用了,于是就把这个注解去掉了,那么此时在编译好的class中就找不到注解了, 这是编译器编译java源程序时对注解进行处理的第一种可能情况,假设java编译器在把java源程序编译成class时,没有把java源程序中的注解去掉,那么此时在编译好的class中就可以找到注解,当程序使用编译好的class文件时,需要用类加载器把class文件加载到内存中,class文件中的东西不是字节码,class文件里面的东西由类加载器加载到内存中去,类加载器在加载class文件时,会对class文件里面的东西进行处理,如安全检查,处理完以后得到的最终在内存中的二进制的东西才是字节码,类加载器在把class文件加载到内存中时也有转换,转换时是否把class文件中的注解保留下来,这也有说法,所以说一个注解的生命周期有三个阶段:java源文件是一个阶段,class文件是一个阶段,内存中的字节码是一个阶段,javac把java源文件编译成.class文件时,有可能去掉里面的注解,类加载器把.class文件加载到内存时也有可能去掉里面的注解,因此在自定义注解时就可以使用Retention注解指明自定义注解的生命周期,自定义注解的生命周期是在RetentionPolicy.SOURCE阶段(java源文件阶段),还是在RetentionPolicy.CLASS阶段(class文件阶段),或者是在RetentionPolicy.RUNTIME阶段(内存中的字节码运行时阶段),根据JDK提供的API可以知道默认是在RetentionPolicy.CLASS阶段

转载于:https://www.cnblogs.com/ouuoliuxing/p/10590982.html

Annotataion相关推荐

  1. 【java】详解java中的注解(Annotation)

    目录结构: contents structure [+] 什么是注解 为什么要使用注解 基本语法 4种基本元注解 重复注解 使用注解 运行时处理的注解 编译时处理的注解 1.什么是注解 用一个词就可以 ...

  2. Visdrone数据集 | 根据目标坐标做聚类算法

    聚类算法 1. 直接聚类后裁剪 2. 分步骤进行聚类.裁剪.可视化图片 (1)使用DBSCAN进行聚类 (2)在原图上裁剪,根据聚类中心框出600*600的矩阵,保存标注格式为xml (3)可视化裁剪 ...

  3. 单元测试及框架简介 --junit、jmock、mockito、powermock的简单使用

    转 单元测试及框架简介 --junit.jmock.mockito.powermock的简单使用 2013年08月28日 14:33:06 luvinahlc 阅读数:6413 标签: 测试工具 单元 ...

  4. springboot集成达梦数据库及SET IDENTITY_INSERT为ON时问题

    集成 pom.xml <!-- 达梦数据库 --> <dependency><groupId>com.dameng</groupId><artif ...

  5. Java注解Annotation的用法 - 自定义Annotation实现

    Java注解又称Java标注,是Java语言5.0版本开始支持加入源代码的特殊语法元数据. Java语言中的类.方法.变量.参数和包等都可以被标注.和Javadoc不同,Java标注可以通过反射获取标 ...

最新文章

  1. Eclipse引入spring约束详细教程
  2. C++11 智能指针unique_ptr使用 -- 以排序二叉树为例
  3. cass软件yy命令_WIN10系统中的CASS字体问题
  4. [WOJ2549]逻辑的连通性
  5. 理解GetHashCode()的缺陷
  6. cdev 结构体、设备号相关知识解析
  7. 鸟哥的Linux私房菜_服务器架设篇 第三版
  8. 如何使用Git上传本地项目到github?(mac版)
  9. GPS经纬度坐标转换的方法
  10. 最喜欢突然说分手的星座,有TA吗?
  11. 不懂就要问!流量卡拒收对个人会有影响吗?
  12. ajax、promise、react、缓存笔记记录
  13. 2021年山东省安全员C证模拟考试及山东省安全员C证作业模拟考试
  14. Centos7.5之Linux系统安装
  15. Win 98系统启动过程全揭密
  16. 职场新人如何发公司内部邮件
  17. 用计算机计算根号2 2-1,如何计算根号2?
  18. Windows网络编程初步
  19. 2018年第13周-虚拟化技术理解(内含Centos7上安装KVM)
  20. 应用程序商店审查指南

热门文章

  1. Redis的两种连接方式
  2. 29_Java_数据库_第29天(JDBC、DBUtils)_讲义
  3. JS原型继承和类式继承
  4. FlatBuffers初探
  5. 算法艺术——网络最大流
  6. oop的三大特性和传统dom如何渲染
  7. python3远程连接MySQL
  8. jenkins参数化构建过程
  9. 输入一个正整数,求它各位数的数字之和
  10. SecureCRT 7 序列号