java编程思想中有关"Class.forName()"和".class"的区别问题
程序是java编程思想中的,我改动了一点点:
class Candy {
static
{
System.out.println("Loading Candy");
}
}
class Gum
{
static
{
System.out.println("Loading Gum");
}
}
class Cookie
{
static
{
System.out.println("Loading Cookie");
}
}
public class SweetShop {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("inside main");
new Candy();
System.out.println("After creating Candy");
try
{
Class.forName("Gum");
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
}
System.out.println("After Class.forName(\"Gum\")");
Class c = Cookie.class;
System.out.println("Cookie toString(): " + c);
System.out.println("After creating Cookie");
}
}
下面是打印结果:
inside main
Loading Candy
After creating Candy
Loading Gum
After Class.forName("Gum")
Cookie toString(): class Cookie
After creating Cookie
问题主要是创建Class引用时,用Class.forName和用类名.class的形式创建有什么区别.
从结果可以看出用Class.forName创建时静态代码块中的语句被执行了,说明类已经被加载了.
但是用Cookie.class获得Cookie的Class对象时静态代码块中的语句没有被执行,是不是就说明此类并没有被加载?
但是如果没有被加载,这个Class确实又被创建了可以调用toString方法(默认调用的),这是怎么回事?