java类加载的几种方式

回顾下java基础、很多人可能不知道java中类加载的过程,记得很久以前面试被问过一道面试题如下:

Q:类的加载有几种方式?
  • new
  • Class.forName()
  • ClassLoader.loadClass()
Q:调用ClassLoader.loadClass()的时候jvm做什么事情?
  • 这个时候只是把该类加载到jvm中并对它进行了格式校验,并解析该文件,分配内存并赋值默认值,并且将符号引用替换成直接引用(内存地址)。
Q:这个时候再调用Class.forName()做了什么事情?
  • 这个时候由于类已经载入,所以不会再次进行加载,所以这个时候会检查类是否加载如果已加载则就初始化。初始就是执行静态代码块初始化。
Q:那么假如我定义了一个public int a=10什么时候这个a=10呢?
  • 实例化的时候,用newInstance()的时候才开始赋值的,这也就是为什么static中不能引用外部非staic变量或者方法的原因。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值