Annotation的作用
- 不是程序本身,可以对程序作出解释
- 可以被其他程序读取
Annotation的格式
- @注释名,还可以添加参数值
Annotation在哪里使用?
- 可以在package,class,method、filed等上面,相当于给他们添加了额外的辅助信息,可以通过反射机制编程实现对这些元数据的访问
常用注解
- @Override 重写
- @Deprecated 不推荐程序员使用,有更好的方法替代
- @SuppressWarnings("all") 抑制警告
元注解
元注解用来管理我们自定义的注解
- @Target 表示我们的注解可以用在哪些地方,表示注解的范围(TYPE,METHOD,FILED)
- @Retention 表示我们的注解在什么地方有效(ROUSE<CLASS<RUNTIME)
- @Documented 表示是否将我们的注解生成在JAVAdoc中
- @Inherited 子类可以继承父类的注解
自定义注解
image.png
反射
image.png
获取Class对象的方式
image.png
哪些类型有Class对象
image.png
Java内存分析
image.png
方法区是一个特殊的堆。
一个类的初始化步骤:
1.类的加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时的数据结构,然后生成一个代表这个类的java.lang.Class对象
2.类的链接:将java类的二进制代码合并到jvm的运行状态之中的过程。
image.png
3.类的初始化
image.png
分析类的初始化,什么时候会发生类的初始化?
image.png
类加载器
image.png
image.png
获取类运行时结构
image.png
image.png
image.png
通过反射动态创建对象执行方法
image.png
image.png
通过反射获取泛型信息
image.png
通过反射获取注解信息
image.png
image.png
image.png