package test;import java.util.*;class Initable {
static final int staticFinal = 47;
static {
System.out.println("Initialing");
}
}public class TestClass { public static void main(String[] args) throws Exception {
Class initable = Initable.class;
System.out.println(Initable.staticFinal);
Class initable1 = Class.forName("test.Initable"); }}
1,我不太理解这个Class 类有什么作用?
2,为什么要Class initable = Initable.class;这个样子写呢?写完后有什么用?
3,为什么把static final int staticFinal = 47;这个句子中的final去掉后,就可以输出Initialing。而留着final就不可以。
谢谢回答!!

解决方案 »

  1.   

    Class这个类记录着一个类的一些基本信息 通过这个类可以获得类名,构造,方法等等
    Initable.clsss就是返回Initable这个类的信息,如果你想创建一个Initable实例可以用initable.newInstance()了,但是Initable需要提供无参构造,第三个就不大清楚了^_^
      

  2.   

    有点IOC的意思 ?? 关注。。
    至于static final 静态不可改变。在内存中的地址和值将不可改变。。好像是这样的
      

  3.   

    final的常量,在其它使用的类里面是不需要原始的类的。也就是,你访问
    Initable.staticFinal根本不会访问Initable类,而是直接使用了47,等同于
    System.out.println(47);这就是final的优化结果
      

  4.   

        好像去掉那个(final)之后,编译结果是:Initialing
                                           47而没有去掉(final)之前结果是:47
                                Initialing
       好像跟您说的结果有点不一样。不知道是不是跟我的编译器有关,我是用Jcreator V4进行编译的。    我想要向您请教:就是那47代表什么,而换成别的好像就不行!谢谢指教.....
      
      

  5.   

    谢谢你,可是有点我还不明白。Initable.clsss就是返回Initable这个类的信息,他返回给了Class的对象initable了么?如果是的话,为什么initable.staticFinal这个语句是不对的?也就是说对象initable为什么不能调用Initable类的成员?
      

  6.   

    对不起。是我没有说清楚。你能出来Initialing 
                                          47 
    ,是因为最后一条语句Class initable1 = Class.forName("test.Initable");他创建了一个
    Initable的对象,所以Initable类中的静态语句就执行了。你把这语句注销了就能看到我说的那种情况。
      

  7.   

    谢谢回答,你的意思是如果去掉final,在访问staticFinal 的时候,会自动创建一个Initable对象么?
      

  8.   

    这本身就不算什么优秀的代码,首先
    Class initable = Initable.class;
    这种写法没有什么实际价值,且不直观,有故意炫耀伎俩的嫌疑
    至于
    System.out.println(Initable.staticFinal);
    则无可非议,静态成员访问即可用实例加点形式,亦可直接类名加点形式来访问最后
    Class initable1 = Class.forName("test.Initable");
    不知所云
      

  9.   

    在访问staticFinal 的时候,并不会自动创建一个Initable对象,只是进行了静态变量的初始化,并没有调用构造函数,测试得之。
      

  10.   

    怎么class有这么个用法,还没学到这来,解决不了……