有关Class对象中Class.forName("package.classname")的疑惑?

duanjianbo26 2008-09-22 03:58:41
首先大家都知道产生Class对象的同时会对该Class对象进行初始化(若以前没有初始化过)
我想问的是这个“初始化”与普通的初始化(通过new 对象)是否一样?
下面的例子通过Class.forName("package.classname")初始化后发现它只初始化了静态域,而未初始化构造函数!这是为什么?

package exc;
class came1 {

static{
System.out.println("staticaa");
}
public came1(){
System.out.println("came1");
}

}
class came2 extends came1{
static{
System.out.println("staticbb");
}
public came2(){
System.out.println("came2");
}
}
public class clo {
public static void main(String [] args) throws ClassNotFoundException{

Class c=null;
c=Class.forName("exc.came2");


Class cy=c.getSuperclass();
System.out.println("cname="+cy.getName()+"is interface:"+cy.isInterface());
}



}

运行结果:
staticaa
staticbb
cname=exc.came1is interface:false
...全文
115 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
duanjianbo26 2008-09-23
  • 打赏
  • 举报
回复
豁然开朗,谢谢各位!散分!
cydp007 2008-09-22
  • 打赏
  • 举报
回复
静态域 静态块 是不依赖于 对象存在的.

当整个类被 第一次加载时.. 会执行静态域(Field)初始化语句和静态块.

而当构造类的实例(Instance)时.. 才会调用类的 相应构造方法.

这就是你得到结果的原因.
hl_ghost 2008-09-22
  • 打赏
  • 举报
回复
  因为你未实例,只是加载类!
came2 c=Class.forName("exc.came2").newInstance();
等价于came2 c=new came2();
等价于came2 c=came2.class.getConstructor(null).newInstance();
fy_kenny 2008-09-22
  • 打赏
  • 举报
回复
Class.(String className)
返回与带有给定字符串名的类或接口相关联的 Class 对象。
这个应该知识把这个指定的类加载到JVM中,但是,没有实例化为对象.

我考虑返回一个 Class对象 即 类对象 和 对象. 类对象==类
非典型射手 2008-09-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 duanjianbo26 的回复:]
引用 1 楼 ZangXT 的回复:
这个例子根Class对象的初始化有什么关系吗

那它怎么会执行静态域的输出呢?
[/Quote]

是因为你new一个对象的时候他首先会初始化这个类,这时会执行静态域的输出.然后又因为你通过new 创建对象,所以又会执行构造器中的输出.

而Class.forName只是加载类,不会设计到创建对象,所以不会执行构造器中的输出
duanjianbo26 2008-09-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ZangXT 的回复:]
这个例子根Class对象的初始化有什么关系吗
[/Quote]
那它怎么会执行静态域的输出呢?
pauliuyou 2008-09-22
  • 打赏
  • 举报
回复
Class.forName 是在加载类信息 即加载.class文件, 在JVM中是唯一的.
而对象却是在用这个类作为模子,加工一下(new)就出来了.
pauliuyou 2008-09-22
  • 打赏
  • 举报
回复
类和对象是两回事
ZangXT 2008-09-22
  • 打赏
  • 举报
回复
这个例子根Class对象的初始化有什么关系吗

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧