Java虚拟机是如何加载Java类的?
虚拟机规范并没有指明二进制字节流要从一个Class文件获取,或者说根本没有指明从哪里获取、怎样获取。这种开放使得Java在很多领域得到充分运用,例如:
- 从ZIP包中读取,这很常见,成为JAR,EAR,WAR格式的基础
- 从网络中获取,最典型的应用就是Applet
- 运行时计算生成,最典型的是动态代理技术,在java.lang.reflect.Proxy中,就是用了ProxyGenerator.generateProxyClass来- 为特定接口生成形式为“*$Proxy”的代理类的二进制字节流
- 由其他文件生成,最典型的JSP应用,由JSP文件生成对应的Class类
从class文件到内存中的类,按先后顺序需要经过加载、链接、以及初始化三大步骤。