package com.thinking.in.java.rtti;import java.util.Random;class Pet {
}class Dog extends Pet {
}class Pug extends Dog {}class Rodent extends Pet {}class Gerbil extends Rodent {}class Hamster extends Rodent {}class Cat extends Pet {}public class PetCount {
private static Random rand = new Random();
static String[] typenames = { "Pet", "Dog", "Pug", "Cat", "Rodent",
"Gerbil", "Hamster" }; public static void main(String[] args) {
Object[] pets = new Object[15];
try {
Class<?>[] petTypes = { Class.forName("Dog"),Class.forName("Pug"), 
Class.forName("Cat"), Class.forName("Rodent"),
Class.forName("Gerbil"), Class.forName("Hamster") };
for (int i = 0; i < pets.length; i++) {
pets[i] = petTypes[rand.nextInt(petTypes.length)].newInstance();
}
} catch (Exception e) {
System.out.println(e);
}
}}
怎么调用函数Class.forName("")一直错误,望高手指导

解决方案 »

  1.   

    Class.forName("name");加载name名字的这个类
      

  2.   

    Class.forName("com.thinking.in.java.rtti.Dog");要使用全名
      

  3.   

    应为你写了包,所有有错误,应为在加载类的时候如果有包要把包名写进去。
    把package com.thinking.in.java.rtti;
    去掉就好了,你试试。
    也可以在加载类的那边加上包名目录
      

  4.   

    Class.forName("XXX类的绝对路径名字") 首先你的保证这个名字对应的类应该在classpath中,这样JVM才能找到,才能够加载类到内存中去,加载的过程中会把静态代码加载到代码区以及静态的变量加载到内存区中的常量池区域中去,不同的是XXX类.class是加载类字面常量,他不加载静态static相关的东西到内存中去除非你调用了这个内的某些东西。
      

  5.   

    Class.forName("com.thinking.in.java.rtti.Dog");
    这个就是类源,你可以看jdk中的class。forname("");z这个函数啊,看下它的参数是怎么样的就是啦。。这个在java反射中是常用的 指明java实体类的方法。总之呢,,,就是类全名就对啦。参考jdk中的函数。。仔细研究下平时习惯翻看jdk就ok啦、。