Java Can';t通过反射实例化类

Java Can';t通过反射实例化类,java,reflection,Java,Reflection,当我使用java反射创建对象时,它将抛出一个“java.lang.ClassNotFoundException”,这是我的代码: public class Demo { public static void main(String[] args) throws Exception { Class clazz = Class.forName("Demo"); Demo d = (Demo) clazz.newInstance(); } } 我错了。

当我使用java反射创建对象时,它将抛出一个“java.lang.ClassNotFoundException”,这是我的代码:

public class Demo {
    public static void main(String[] args) throws Exception {
        Class clazz = Class.forName("Demo");
        Demo d = (Demo) clazz.newInstance();
    }
}

我错了。

您必须使用类的完全限定名,即包括包,例如:

public class Demo {
    public static void main(String[] args) throws Exception {
        Class clazz = Class.forName("com.mycompany.mypackage.Demo");
        Demo d = (Demo) clazz.newInstance();
    }
}

将完整的包名传递给
forName
方法。

或者,基于
java.lang.invoke
的解决方案的额外积分:)


在哪个包中是
Demo
?org.ejs.Demo.createObj然后尝试
Class.forName(“org.ejs.Demo.createObj.Demo”)哦,你是rihgt,包裹是必须的,谢谢!
    MethodType mt; MethodHandle mh;
    MethodHandles.Lookup lookup = MethodHandles.lookup();

    mt = MethodType.methodType(void.class);

    try {
        Class klass = Class.forName("com.mycompany.mypackage.Demo");
        mh = lookup.findConstructor(klass, mt);

        Object obj = (Object)mh.invoke();
    } catch (Throwable ex) {
        // ERR
        System.out.println(ex);
    }