加载是类加载的一个阶段。不要弄混淆了
这一阶段主要做了下面三件事。
1.通过一个类的全限定名获取此类的二进制流
2.将这个二进制流代表的静态存储结构转化为方法区的运行时数据结构
3.在内存中生成java.lang.Class对象,作为访问入口
.通过一个类的全限定名获取此类的二进制流:这一步说的不明确,要怎样获取呢。java虚拟机没有指明。所以就产生了很多种获取方法
1.从zip,jar,war包获取
2.从网络中获取
3.运行时生成,如动态代理
4.有其他文件生成 如jsp
5.从数据库中获取,这我还没理解。先放着吧
加载分为加载非数组类和数组类:
加载非数组类,可以使用系统的类加载器,也可以自定义类加载器(即重写loadClass()方法)
加载数组类,数组的组件类型时引用类的采用递归加载这个组件类型。数组在该类的类加载器的类名称空间上被标识
数组的组件类型不是引用类(如int[]),那么数组就与引导类加载器关联
顺便一提
数组类的可见性和组件类型可见性一致,组件类型不是引用类型就直接默认为public
加载完成后,二进制字节流存储在方法区中,然后堆中生成Java.lang.Class对象。
最后说下加载和连接部分内容是交叉进行的,但是加载还是在连接前面
时间: 2024-10-14 01:25:10