首先大家都知道产生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
我想问的是这个“初始化”与普通的初始化(通过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
解决方案 »
- hashCode() 有什么用?
- 一个奇怪的日期问题
- 求一使用addAncestorListener()的代码,本人不太了解API的描述,忘高手指点一二。
- jsp里默认如何选择combo中的一个项
- 求教Eclipse图片显示问题
- 谁有SWT/SWING Designer的注册机?
- setPreferredSize()方法的作用是什么?
- 编码时,隔着多个空格,有什么快捷键可以直接代替一直按空格键
- 小弟刚下载了j2sdkee1.2.1 ,但不知道如何配置,那位大哥愿意帮忙,详细讲一讲如何配置。
- 在线等 Java Jspinner转换问题
- spring中事务管理的问题
- jdk1.1 的开发环境或者是用什么工具呀!!
而对象却是在用这个类作为模子,加工一下(new)就出来了.
是因为你new一个对象的时候他首先会初始化这个类,这时会执行静态域的输出.然后又因为你通过new 创建对象,所以又会执行构造器中的输出.而Class.forName只是加载类,不会设计到创建对象,所以不会执行构造器中的输出
返回与带有给定字符串名的类或接口相关联的 Class 对象。
这个应该知识把这个指定的类加载到JVM中,但是,没有实例化为对象.我考虑返回一个 Class对象 即 类对象 和 对象. 类对象==类
came2 c=Class.forName("exc.came2").newInstance();
等价于came2 c=new came2();
等价于came2 c=came2.class.getConstructor(null).newInstance();
而当构造类的实例(Instance)时.. 才会调用类的 相应构造方法. 这就是你得到结果的原因.