用反射在Java中实例化类

用反射在Java中实例化类,java,eclipse,Java,Eclipse,我试图创建一个方法,该方法将基于给定接口实例化一个类。目前,我正试图基于类名实例化一个类,但我一直得到ClassNotFoundException 谁能告诉我我做错了什么 public class Message implements IExample{ @Override public String showMessage() { return "merge"; } } public static void main(String[] args) th

我试图创建一个方法,该方法将基于给定接口实例化一个类。目前,我正试图基于类名实例化一个类,但我一直得到
ClassNotFoundException

谁能告诉我我做错了什么

public class Message implements IExample{
    @Override
    public String showMessage() {
        return "merge";
    }
}

public static void main(String[] args) throws Exception{
    Object mess = Class.forName("Message").newInstance();
}
编辑

我试过:

Object mess = Class.forName("com.MyExample.Message").newInstance();
Object mess = Class.forName("Project.MyExample.Message").newInstance();
Object mess = Class.forName("MyExample.Message").newInstance();
它们都抛出
ClassNotFoundException
和一个窗口,该窗口告诉我“未找到源代码”,并带有一个按钮(编辑源代码查找路径…),让我浏览文档


主类和
消息
类都位于名为“project”的项目和名为
MyExample

的包中,您需要为其指定完全限定的类名

参数:className所需类的完全限定名

如果
Message
在package
com.package
中,则为
com.package.Message

Object mess = Class.forName("com.package.Message").newInstance();
Object mess = Class.forName("x.y.Message").newInstance();

启动应用程序时,该类必须位于类路径上。

您需要为其指定完全限定的类名

参数:className所需类的完全限定名

如果
Message
在package
com.package
中,则为
com.package.Message

Object mess = Class.forName("com.package.Message").newInstance();
Object mess = Class.forName("x.y.Message").newInstance();

启动应用程序时,该类必须位于类路径上。

如果消息类在包中,则需要指定全名,例如
edu.myschool.mypackage.Message
如果消息类在包中,则需要指定全名,例如
edu.myschool.mypackage.Message

您需要提供类的完全限定名。如果
Message
在包
x.y
中,则必须提供
x.y.Message

Object mess = Class.forName("com.package.Message").newInstance();
Object mess = Class.forName("x.y.Message").newInstance();

您需要提供类的完全限定名。如果
Message
在包
x.y
中,则必须提供
x.y.Message

Object mess = Class.forName("com.package.Message").newInstance();
Object mess = Class.forName("x.y.Message").newInstance();

类名不应该包括ProjectName,而应该包括src文件夹中定义的包名结构

如果您使用的是Eclipse,请确保在项目中正确定义了src文件夹。 是如何更改应用程序的src文件夹(如果需要)

结构应该是这样的:

Project
 |
 +-src
 | |
 | +-com
 |   |  
 |   +-MyExample
 |     |
 |     +-MyClass
 +-build
在这种情况下,你应该能够说

Class.forName(“com.MyExample.MyClass”).newInstance()


如何定义src文件夹中的结构非常重要,并确保在IDE项目设置中定义了正确的src文件夹。

类名不应包括ProjectName,而应包括在src文件夹中定义的包名结构

如果您使用的是Eclipse,请确保在项目中正确定义了src文件夹。 是如何更改应用程序的src文件夹(如果需要)

结构应该是这样的:

Project
 |
 +-src
 | |
 | +-com
 |   |  
 |   +-MyExample
 |     |
 |     +-MyClass
 +-build
在这种情况下,你应该能够说

Class.forName(“com.MyExample.MyClass”).newInstance()


如何定义src文件夹中的结构,并确保在IDE项目设置中定义了正确的src文件夹,这一点非常重要。

是否确定class
Message
位于类路径上?此外,还需要完全限定的类名
com.whatever.Message
您的套餐是什么?你的
消息.class
在哪里?类消息和主方法是否在一个公共类中?如果是这样,请在此处查看:您确定class
Message
位于类路径上吗?此外,还需要完全限定的类名
com.whatever.Message
您的套餐是什么?你的
消息.class
在哪里?类消息和主方法是否在一个公共类中?如果是,请在此处查看: