API中介绍的Class.forName("A") is equivalent to:Class.forName("A",true,classloader)。面第二个参数:
initialize:whether the class must be initialized。因此这里应该是实例化A的。可网上有的说,Class.forName("A")只是加载A并调用A中的static block,并没有实例化A,请问哪种说法对?我写了一个例子:class A {
static {
System.out.println("A");
}
public void test(){
System.out.println("test in A");
}
}如果Classic.forName("A",false,A.class.getClassLoader())是不执行A的static block的,若为true则打印出A。
Class.forName("A").newInstance()只打印出一个A,而A.class.newInstance()也打印出一个A。因此我认为newInstance()在实例化前判断该类有没有initialized,若无则返回一个实例,api是这么说的:The class is initialized if it has not already been initialized. 若已经实例化则newInstance()不做任何事。Am I right ,please ?
initialize:whether the class must be initialized。因此这里应该是实例化A的。可网上有的说,Class.forName("A")只是加载A并调用A中的static block,并没有实例化A,请问哪种说法对?我写了一个例子:class A {
static {
System.out.println("A");
}
public void test(){
System.out.println("test in A");
}
}如果Classic.forName("A",false,A.class.getClassLoader())是不执行A的static block的,若为true则打印出A。
Class.forName("A").newInstance()只打印出一个A,而A.class.newInstance()也打印出一个A。因此我认为newInstance()在实例化前判断该类有没有initialized,若无则返回一个实例,api是这么说的:The class is initialized if it has not already been initialized. 若已经实例化则newInstance()不做任何事。Am I right ,please ?
还需要实例化Class对象? 我来找找看
// DO SOMETHING
}
// OR
public static X x = initX();这个叫做类的初始化<clinit>,而newInstance或者直接new,叫做实例化<init>
cinit和init,要分清
我的压缩包里面不止一两样东西哦,那可是我学习和工作的所有资料,不管是学习还是工作都会需要。
http://download.csdn.net/user/yangtonghai
正解。关键是你要知道static block是什么时候执行的,这个静态代码块是在类被加载的时候执行的,而且只执行一次。
正解