看到这个题目,我也不明白为什么Cookie 类的静态代码没有执行.如果类加载了这个static代码就应该执行啊。如果没加载,怎么能使用Cookie.class属性呢
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"); 
} } 

解决方案 »

  1.   

    ry
    {
    Class.forName("Gum");
    }
    catch(ClassNotFoundException e)
    {
    e.printStackTrace();

    这段代码有问题,出现异常
      

  2.   

    测试了下,发现 类.class 这个东西,不能代表对类的访问
    实际上,在编译期,这个已经决定下来了再比如 static final int 的常量,你访问,并不会造成对指定类的载入,这个东西再编译期已经内联了
      

  3.   

    这里讨论过了:
    http://community.csdn.net/Expert/topic/5478/5478850.xml?temp=.9950983
      

  4.   

    回复人:redduke1202(勿以分少而不回★★勿以分多而灌水) ( ) 信誉:100 2007-04-28 17:35:32 得分:0
    ? 测试了下,发现 类.class 这个东西,不能代表对类的访问
    实际上,在编译期,这个已经决定下来了再比如 static final int 的常量,你访问,并不会造成对指定类的载入,这个东西再编译期已经内联了
    ------------------------------------------------
    有道理!绝对支持!
    这是你的那个SweetShop类反编译的结果:看了就知道了.
    import java.io.PrintStream;public class SweetShop
    {    public SweetShop()
        {
        }    public static void main(String args[])
        {
            System.out.println("inside main");
            new Candy();
            System.out.println("After creating Candy");
            try
            {
                Class.forName("Gum");
            }
            catch(ClassNotFoundException classnotfoundexception)
            {
                classnotfoundexception.printStackTrace();
            }
            System.out.println("After Class.forName(\"Gum\")");
            Object obj = Cookie;//<-------------------------------------------------------这儿!
            System.out.println((new StringBuilder()).append("Cookie toString(): ").append(obj).toString());
            System.out.println("After creating Cookie");
        }
    }
      

  5.   

    个性签名------JAVA群31697908,高手进。
      

  6.   

    发现 类.class 这个东西,不能代表对类的访问
    java编译器在编译过程中已经将这些类的信息复制了一份
    访问的时候不用加载就可以直接获取信息
      

  7.   

    我刚刚试了一下,可以执行的啊。输出结果:
    inside main
    Loading Candy
    After creating Candy
    Loading Gum
    After Class.forName("Gum")
    Loading Cookie
    Cookie toString(): class Cookie
    After creating Cookie
      

  8.   

    我明白一些了  但是这个是什么意思?反编译后 的 java.lang.Object obj = Cookie;  这行  她是由Class c = Cookie.class; 编译生成的代码 。 Cookie是类名,赋值给一个对象是什么意思?