首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-12-24 
使用Class.forName(“classname”)与对象.class的区别使用Class.forName(),为了产生Class引用,会立即执行静

使用Class.forName(“classname”)与对象.class的区别
使用Class.forName(),为了产生Class引用,会立即执行静态块的初始化,但不执行构造器方法

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

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

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

热点排行