类的加载机制与存储过程
Java在运行过程中有其自己的加载机制,首先来看看Java内存的存储原理
基本类型数据存储在栈
例如 byte:‘Byte’、short:‘Short’、int:‘Integer’、float:‘float’、boolean:‘Boolean’、char:‘Char’
引用类型数据存储在堆(方法区是特殊的堆)
例如 class(类)、interface(接口)、array(数组)
类的加载
平时我们写入的class,在通过new一个对象,或者反射后就会进行类的初始化,运行过程中是由以下顺序执行的
1.类加载
将未加载的class读入,将静态数据转化成方法区里的运行数据,并创建Class对象到堆中
2.类链接
将类的二进制数合并到 JRE 中,为类变量(static)分配内存并设置类变量默认初始值
3.类初始化
JVM初始化类,执行构造器的clinit()方法,将代码合并
加载完class后在,'堆内存’中产生了一个Class类型对象
#注:(反射调用的一个类在内存中只有一个class对象) 下面为验证
//已经有了一个class 叫做test
Class c3 = test.class;//通过反射得到加载后的Class
System.out.println(c2.hashCode());//2074407503
System.out.println(c3.hashCode());//2074407503 两个哈希值相同,说明指向统一地址
理解存储机制和类的加载有利于理解一些Java技术的原理
如:
注解与反射:加载完class后在,**‘堆内存’**中产生了一个Class类型对象,通过调用该对象获取类的结构
equals的比较方法:https://blog.csdn.net/weixin_66261421/article/details/125138121(下一个博客应用)