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就不可以。
谢谢回答!!
Initable.clsss就是返回Initable这个类的信息,如果你想创建一个Initable实例可以用initable.newInstance()了,但是Initable需要提供无参构造,第三个就不大清楚了^_^
至于static final 静态不可改变。在内存中的地址和值将不可改变。。好像是这样的
Initable.staticFinal根本不会访问Initable类,而是直接使用了47,等同于
System.out.println(47);这就是final的优化结果
47而没有去掉(final)之前结果是:47
Initialing
好像跟您说的结果有点不一样。不知道是不是跟我的编译器有关,我是用Jcreator V4进行编译的。 我想要向您请教:就是那47代表什么,而换成别的好像就不行!谢谢指教.....
47
,是因为最后一条语句Class initable1 = Class.forName("test.Initable");他创建了一个
Initable的对象,所以Initable类中的静态语句就执行了。你把这语句注销了就能看到我说的那种情况。
Class initable = Initable.class;
这种写法没有什么实际价值,且不直观,有故意炫耀伎俩的嫌疑
至于
System.out.println(Initable.staticFinal);
则无可非议,静态成员访问即可用实例加点形式,亦可直接类名加点形式来访问最后
Class initable1 = Class.forName("test.Initable");
不知所云