使用Class.forName(“classname”)与对象.class的区别

使用Class.forName(),为了产生Class引用,会立即执行静态块的初始化,但不执行构造器方法

而使用对象.class来创建对对象的引用时,则事实上做了以下3步事情:
1:加载 这是由类加载器完成的,该步骤将查找字节码文件,然后创建一个class对象
2:链接 该步骤将验证类中的字节码,为静态域分配存储空间
3:初始化 将执行类的静态块的初始化工作

注意:该初始化会延迟到对该class对象的第一次使用上,但事实也并非如此

这里先介绍下编译期常量概念
如果一个类里定义了static final 类型的变量 则该变量属于编译期常量 它会在类加载的时候,就执行了
所以如果试图调用该类的其他类型变量,则会强制进行该类的初始化(也即执行它的静态方法和静态语句块),来获得一个Class引用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值