谁帮我看看题目,我不明白为什么Cookie 类的静态代码没有执行,

dongdandan 2007-04-27 03:05:45
看到这个题目,我也不明白为什么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");
}

}
...全文
274 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongdandan 2007-04-30
  • 打赏
  • 举报
回复
up
maco21 2007-04-29
  • 打赏
  • 举报
回复
发现 类.class 这个东西,不能代表对类的访问
java编译器在编译过程中已经将这些类的信息复制了一份
访问的时候不用加载就可以直接获取信息

机器猫999 2007-04-29
  • 打赏
  • 举报
回复






个性签名------JAVA群31697908,高手进。
dongdandan 2007-04-29
  • 打赏
  • 举报
回复
我明白一些了 但是这个是什么意思?

反编译后 的 java.lang.Object obj = Cookie; 这行 她是由Class c = Cookie.class; 编译生成的代码 。 Cookie是类名,赋值给一个对象是什么意思?
oberstein0125 2007-04-29
  • 打赏
  • 举报
回复
我刚刚试了一下,可以执行的啊。

输出结果:
inside main
Loading Candy
After creating Candy
Loading Gum
After Class.forName("Gum")
Loading Cookie
Cookie toString(): class Cookie
After creating Cookie
hoverlees 2007-04-28
  • 打赏
  • 举报
回复
回复人: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");
}
}
CrazyGou 2007-04-28
  • 打赏
  • 举报
回复
这里讨论过了:
http://community.csdn.net/Expert/topic/5478/5478850.xml?temp=.9950983
「已注销」 2007-04-28
  • 打赏
  • 举报
回复
测试了下,发现 类.class 这个东西,不能代表对类的访问
实际上,在编译期,这个已经决定下来了

再比如 static final int 的常量,你访问,并不会造成对指定类的载入,这个东西再编译期已经内联了
dyw31415926 2007-04-28
  • 打赏
  • 举报
回复
ry
{
Class.forName("Gum");
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
}
这段代码有问题,出现异常
dongdandan 2007-04-27
  • 打赏
  • 举报
回复
再再up
dongdandan 2007-04-27
  • 打赏
  • 举报
回复
唉 再vup
dongdandan 2007-04-27
  • 打赏
  • 举报
回复
自己up

62,615

社区成员

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

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