Java反射,类对象

Java反射,类对象,java,class,reflection,Java,Class,Reflection,我的目标是在命令行中读入我希望观察的类的名称。当我在运行前知道类名时,我没有问题。我似乎无法管理的是如何基于字符串输入创建类对象 public class Tester { static void methodInfo2(Object obj) throws ClassNotFoundException { //some stuff System.out.print("Test!"); } public static

我的目标是在命令行中读入我希望观察的类的名称。当我在运行前知道类名时,我没有问题。我似乎无法管理的是如何基于字符串输入创建类对象

public class Tester {

    static void methodInfo2(Object obj) throws ClassNotFoundException {
        //some stuff        
        System.out.print("Test!");

    }

    public static void main (String args[]) throws ClassNotFoundException{
        String className = args[0];
        System.out.println("Class:  "+className);

        //myclass2 mc = new myclass2();
        //Class c = mc.getClass();
        Class argClass = Class.forName(className);

        try {
            methodInfo2(argClass);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }


    }

}
main方法中注释掉的两行显示了我在编译之前知道类名时所做的工作。下面未注释的行显示了我认为应该工作的内容,但我收到一个ClassNotFoundException。这个班当然存在,所以我不确定我有什么问题

两个建议:

  • 确保您为它提供了完全限定的名称(例如,
    “java.lang.Thread”
    ,而不仅仅是
    “Thread”
  • 确保编译的类文件实际位于类路径上

  • Class.forName
    是在运行时按名称加载类的正确方法


    要么你的论点是错误的,要么你的类不在类路径中。

    谢谢你的快速回复!对于那些后来发现这个主题的人,我的问题是我想要的类,我在elcipse的包中定义了我自己。修复方法是将包名附加到类名的开头:“packageName.myclass2”