【JVM】如何加载.class文件(forName、loadClass)

Java虚拟机

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文件的原理机制

注:以上图片来源:慕课-翔仔

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值