Java虚拟机

Java的类加载机制
JVM将描述类的数据从class文件中加载到内存,然后对数据进行校验、准备和解析,最后初始化,形成在Java虚拟机中可以直接使用的Java类型

类加载的两种动态机制方法
1. 隐式加载
new一个对象;调用一个类的静态方法
2. 显示加载
java.lang.Class的forName方法;java.lang.ClassLoad的loadClass方法
forName与loadClass的相同与不同
相同
类—所有属性和方法、对象—所有方法和属性
区别
- Class.forName得到的class是已经初始化完成的
- Classloder.loadClass得到的class是还没有链接的
1. Class.forName
public static Class forName(String className)//initialize默认为true,等同于调用forName(className,true,loader)
public static Class forName(String className,boolean initialize,ClassLoader loader)
//最终两个方法都会执行到此方法...
private static native Class<?> forName0(String name,boolean initialize,ClassLoader loader,Class<?> caller)
className:类的完全限定名
initialize:是否初始化类(初始化类中的静态代码块static{})
loader:加载类的类加载器
2. Classloder.loadClass
Classloder.loaderClass(String name)
Classloder.loadClass(name,false)//被方法内部调用
Classloder.loadClass(String name,boolean resolve)//方法
name:类的全限定类名
resolve:是否解析该类
**例:**Class.forNname("com.mysql.jdbc.Driver")
public class Driver extends NonRegisteringDriver implements java.sql.Driver{
public Driver() throws SQLException{
}
static{
try{
DriverManager.registerDriver(new Driver());
}catch(SQLException var1){
throw new RuntimeException("Can\'t register driver!");
}
}
}
补充学习点
注:以上图片来源:慕课-翔仔
本文深入探讨了Java虚拟机(JVM)如何加载类文件至内存,包括校验、准备、解析及初始化过程。介绍了类加载的两种动态机制:隐式加载与显示加载,并对比了Class.forName与Classloder.loadClass的区别。
&spm=1001.2101.3001.5002&articleId=104391057&d=1&t=3&u=84ed860d8cde46a5a4c545a2abc9ff19)
1340

被折叠的 条评论
为什么被折叠?



