我最近在看think in java,里面第11章介绍的东西看起来很吃力,我想问一下,class到底是什么?和String似的,也是一种类型马?这种类型有什么用?import java.util.*;class Pet {}
class Dog extends Pet {}
class Pug extends Dog {}
class Cat extends Pet {}
class Rodent extends Pet {}
class Gerbil extends Rodent {}
class Hamster extends Rodent {}class Counter { int i; }public class PetCount {
  static String[] typenames = {
    "Pet", "Dog", "Pug", "Cat",
    "Rodent", "Gerbil", "Hamster",
  };
  public static void main(String[] args) {
    Vector pets = new Vector();
    try {
      Class[] petTypes = {
        Class.forName("c11.petcount.Dog"),
        Class.forName("c11.petcount.Pug"),
        Class.forName("c11.petcount.Cat"),
        Class.forName("c11.petcount.Rodent"),
        Class.forName("c11.petcount.Gerbil"),
        Class.forName("c11.petcount.Hamster"),
      };
      for(int i = 0; i < 15; i++)
        pets.addElement(
          petTypes[
            (int)(Math.random()*petTypes.length)]
            .newInstance());
    } catch(InstantiationException e) {}
      catch(IllegalAccessException e) {}
      catch(ClassNotFoundException e) {}
    Hashtable h = new Hashtable();
    for(int i = 0; i < typenames.length; i++)
      h.put(typenames[i], new Counter());
    for(int i = 0; i < pets.size(); i++) {
      Object o = pets.elementAt(i);
      if(o instanceof Pet)
        ((Counter)h.get("Pet")).i++;
      if(o instanceof Dog)
        ((Counter)h.get("Dog")).i++;
      if(o instanceof Pug)
        ((Counter)h.get("Pug")).i++;
      if(o instanceof Cat)
        ((Counter)h.get("Cat")).i++;
      if(o instanceof Rodent)
        ((Counter)h.get("Rodent")).i++;
      if(o instanceof Gerbil)
        ((Counter)h.get("Gerbil")).i++;
      if(o instanceof Hamster)
        ((Counter)h.get("Hamster")).i++;
    }
    for(int i = 0; i < pets.size(); i++)
      System.out.println(
        pets.elementAt(i).getClass().toString());
    for(int i = 0; i < typenames.length; i++)
      System.out.println(
        typenames[i] + " quantity: " +
        ((Counter)h.get(typenames[i])).i);
  }
} 这里面的Class.forName("c11.petcount.Dog"),是什么意思?谢谢大家

解决方案 »

  1.   

    Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。 Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。forName(String className) 
              返回与带有给定字符串名的类或接口相关联的 Class 对象。
    API上面都有的,看看吧
      

  2.   

    得到c11.petcount.Dog这个类的Class 
    通过这个Class可以实例Dog这个类的对象 
    或者通过反射操作Dog对象的方法 或者 修改Dog类对象的数据此Class非彼class  可以把他想想为一种Type
      

  3.   

    Class是为了描述类这个东西而给出的更加抽象的一个类。
    比如Dog,Cat这样的类,它们有什么共同点呢?有成员方法,有成员变量,有构造方法等等。Class给出了它们更高层次的抽象,而不是具体的方法、变量。
    Class.forName("c11.petcount.Dog"),得到了用于描述Dog类实例的Class的实例。
      

  4.   

    Class.forName("c11.petcount.Dog")
    加载一个类到内存中,是CLASSLOAD的一种形式
      

  5.   

    我最近在看think in java,里面第11章介绍的东西看起来很吃力,我想问一下,class到底是什么?和String似的,也是一种类型马?这种类型有什么用?
    --------------------------------------------------------------------------------class也是一种类型,每个具体的class实例就是一个object(比如String.class)例子,你平时用的对象就是这种类对象的实例.class是属于更高一层的抽象.这里面的Class.forName("c11.petcount.Dog"),是什么意思?谢谢大家
    ------------------------------------------------------------------------------------
    这里就是产生一个class类的实例,该实例就是Dog.class.
    推荐楼主买本书<深入java虚拟机>. 
      

  6.   

    Class类意义太重大了。只可意会,不可言传!
      

  7.   

    Class.forName("c11.petcount.Dog") 返回与带有c11.petcount.Dog相关联的 Class 对象
      

  8.   

    Class class就是Class类, 对于每一个Java类, 都有一个Class类型的对象与之对应英文的书里面讲到这里都是Class class一大堆, 慢慢看吧