下面是java的简单工厂方法我用了java的反射机制。可它老是出现异常啊,上网查了下也没找到解决方法,那位能告诉我是什么原因啊,小弟在此谢了。
public interface Animal {

public void run();}
public class Tiger implements Animal{

public void Tiger()
{

}

public void run()
{
System.out.println("老虎会跑");
}

public void eat()
{
System.out.println("老虎会吃");
  
}}public class SampleFactory 
{
public static Animal createAnimal(String className) throws ClassNotFoundException, InstantiationException, IllegalAccessException
{
Class c=Class.forName(className);
Animal animal=(Animal)c.newInstance();
return animal;
}}
public class Client {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {

Animal animal=SampleFactory.createAnimal("Tiger");
animal.run(); }}异常:Exception in thread "main" java.lang.ClassNotFoundException: Tiger
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)

解决方案 »

  1.   

    classpath设置的问题吧?因为你的类没有在classpath里
    试试通过用URLClassLoader加载类,获得Class的实例我没有尝试,也是个初学者,不过lz可以试试我说的方法
      

  2.   

    补充下上面回答:URL url = new URL("file:\\" + path + "\\");
    URLClassLoader ucl = new URLClassLoader(new URL[]{url});
    Class c = ucl.loadClass(classname);
      

  3.   

    猛然发现,现在研究反射的人越来越多了。
    Class.forName要给定类型的完全限定名即 包名.类名。
    在你java基础还不是很好的时候,不要去关心反射,虽然反射很重要,但是实用不多,而且你暂时不好理解。
      

  4.   

    所以就要从基础开始嘛,一年之内要把java基础弄通才行的
    然后再跳