Thinking in java第十一章中间有这么一个程序:
public class Groundhog
{
protected int number;
public Groundhog(int n)
{
number=n;
}
public String toString()
{
return "Groundhog # "+number;
}
};public class Prediction
{
private boolean shadow=Math.random()>0.5;
public String toString()
{
if(shadow)
return "Six more weeks of Winter!";
else
return "Early Spring!";
}
};import java.util.*;
import java.lang.reflect.*;
public class SpringDetector
{
public static void detectSpring(Class groundHogClass) throws Exception
{
Constructor ghog=groundHogClass.getConstructor(new Class[] {int.class});
Map map=new HashMap();
for(int i=0;i<10;i++)
map.put(ghog.newInstance(new Object[]{new Integer(i)}),new Prediction());
System.out.println("map = "+map+"\n");
Groundhog gh=(Groundhog)ghog.newInstance(new Object[]{new Integer(3)});
System.out.println("Looking up prediction for "+gh);
if(map.containsKey(gh))
System.out.println((Prediction)map.get(gh));
else
System.out.println("Key not found: "+gh); }
public static void main(String [] args) throws Exception
{
detectSpring(Groundhog.class);
}
};
问题-:Constructor ghog=groundHogClass.getConstructor(new Class[] {int.class});这里是什么意思?特别是:new Class[] {int.class},那个int.class 是什么来的?问题二:Groundhog gh=(Groundhog)ghog.newInstance(new Object[]{new Integer(3)});这也不懂,(new Object[]{new Integer(3)})这又是什么意思?创建的是什么东西?谢谢帮忙!!!

解决方案 »

  1.   

    jdk在加载类的时候会给每个类实例一个Class对象,在程序中可以通过ClassName.class或实例.getClass();还有Class.forName(packagename.ClassName);来获取。
      

  2.   

    Constructor ghog=groundHogClass.getConstructor(new Class[] {int.class});
    这句话的意思是建造一个构造函数,参数为int型的。
      

  3.   

    Groundhog gh=(Groundhog)ghog.newInstance(new Object[]{new Integer(3)});
    通过前面找到的构造器ghog,执行他的newInstance方法,并指定参数为3,构造一个Groundhog 对象。
    不好意思,在做其他的事,发了三帖。
      

  4.   

    (new Object[]{new Integer(3)})
    ---
    这句生成了一个Object[]类型的数组,长度为1,里边有一个封装了3的Integer对象.