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!");
}
}
}
补充学习点
注:以上图片来源:慕课-翔仔