【JavaSE】java的反射与注解(2021.4.9)
发布日期:2021-05-07 05:34:24 浏览次数:31 分类:精选文章

本文共 1481 字,大约阅读时间需要 4 分钟。

注解

1、注解是什么?

在这里插入图片描述

2、内置注解

在这里插入图片描述

3、元注解

负责注解其他注解

在这里插入图片描述在这里插入图片描述

runtime > class > source

4、自定义注解

在这里插入图片描述

在这里插入图片描述

——————————————————————————

反射

5. 动态语言和静态语言

在这里插入图片描述

6、反射的含义

在这里插入图片描述

7、class类

在这里插入图片描述

8、class类的常用方法

在这里插入图片描述

9、创建类的方式有哪些

在这里插入图片描述

10、哪些类型可以有class对象

在这里插入图片描述

在这里插入图片描述

只要元素类型与维度一样,那就是同一个class。

11、java内存分析

在这里插入图片描述

方法区是特殊的堆,存放一些类和static变量。

12、类的加载过程

在这里插入图片描述

在这里插入图片描述

1、(加载)将字节码加载到内存,将静态数据转换成方法区的运行时数据结构,并在堆中产生一个类对应的class对象;(方法区中的类,在堆上建立一个引用。)

2、(验证+准备+解析)验证完符合JVM规范后,给类变量在方法区上分配内存,并设置默认初始值0(这里只是给了个默认初始值,实际初始值在初始化的时候才给赋值);解析过程将常量池中的符号引用替换为直接引用(地址)。

3、初始化,开始执行代码(栈中的main方法),将代码块合并(此时static变量的初始值假如在之后再次进行赋值,那么之前的值将会被覆盖)

在这里插入图片描述

13、类的初始化

类的主动引用(有且只有6种情况):

1、虚拟机启动,先初始化main方法所在的类;(虚拟机启动——>针对于main方法所在的类)
2、new一个类的对象;(new一个对象)
3、调用类的静态成员(除了final修饰的)和静态方法;(静态变量)
4、使用java.lang.reflect包的方法对类进行反射调用;(反射调用) Class.forName
5、当初始化一个类,如果其父类没有被初始化,则会先初始化其父类。(子类初始化)

类的被动引用(不会发生类的初始化)

1、当访问某静态域时,只有真正声明该域的类才会被初始化。(子类引用父类的静态变量不会导致子类初始化)
2、通过数组定义类引用,不会触发此类的初始化;
3、引用常量不会触发此类的初始化**(常量在链接阶段就已经存入常量池了)**

14、类加载器

在这里插入图片描述

作用: 将class文件字节码加载到内存之后,会对静态数据转换为方法区的运行时数据结构,并在堆上生成代表该类的java.lang.Class对象,作为方法区中类数据的访问入口。(加载字节码——>在方法区建立运行时数据结构——>在堆上生成该类的引用)。

类缓存: 某个类被加载到类加载器后,将维持一段时间,JVM垃圾回收机制才会回收这些class对象。

类加载器的类型:引导类加载器、扩展类加载器、系统类加载器。

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

15、获取类的运行时结构

通过反射获取运行时类的完整结构

1、实现的全部接口;
2、所继承的父类;
3、全部的构造器;
4、全部的方法;
5、全部的域(属性);
6、注解

双亲委派机制,的确是防止同名包、类与 jdk 中的相冲突,实际上加载类的时候,先通知 appLoader,看 appLoader 是否已经缓存,没有的话,appLoader 又委派给他的父类加载器(extLoader)询问,看他是不是能已经缓存加载,没有的话,extLoader 又委派他的父类加载器(bootstrapLoader)询问,BootstrapLoader看是不是自己已缓存或者能加载的,有就加载,没有再返回 extLoader,extLoader 能加载就加载,不能的话再返回给 appLoader 加载,再返回的路中,谁能加载,加载的同时也加缓存里。正是由于不停的找自己父级,所以才有 Parents 加载机制,翻译过来叫 双亲委派机制。

上一篇:【面试题分析】第八篇 百度IOS客户端面经(21 届秋招)|快手客户端开发面经(21 届秋招)
下一篇:关于序列化和反序列化

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年04月17日 12时57分28秒