中易网

java中如何实现由类名动态创建对象

答案:5  悬赏:50  
解决时间 2021-01-17 04:58
  • 提问者网友:美人性情
  • 2021-01-16 15:14
java中如何实现由类名动态创建对象
最佳答案
  • 二级知识专家网友:不如潦草
  • 2021-01-16 15:20
Class.forName("类的全名").newInstance();
类的全名:就是指该类的包名加上类名;forName返回与带有给定字符串名的类或接口相关联的 Class 对象;newInstance创建此 Class 对象所表示的类的一个新实例
全部回答
  • 1楼网友:刀戟声无边
  • 2021-01-16 18:00
用反射机制,Struts就是基于这个原理!
  • 2楼网友:长青诗
  • 2021-01-16 17:26
用反射API啊 很容易的
  • 3楼网友:第幾種人
  • 2021-01-16 17:04
*******************************************************************
新建类DynamicCreateObject.java,具体代码如下(动态创建对象已加注释):
*******************************************************************
public class DynamicCreateObject {
public static void main(String[] args) {
try {
Student stu = (Student) (Class.forName("Student").newInstance());//由类名动态创建对象
stu.setName("Godwin");
stu.setGender("male");
System.out.println("姓名:" + stu.getName() + ", 性别:"
+ stu.getGender());
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
class Student {
String name;
String gender;
public Student() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
*******************************************************************
运行结果如下:
*******************************************************************
姓名:Godwin, 性别:male
  • 4楼网友:深街酒徒
  • 2021-01-16 16:00

  首先用 Class.forName(完整类名)获得一个Class对象clazz,然后调用Class对象clazz的newInstance()方法得到一个对象。例如:package kown.reflect;
public class ReflectTest
{
    public static void main(String[] args)
    {
        try
        {
            Class<?> clazz = Class.forName("kown.reflect.Show");
            Show show = (Show) clazz.newInstance();
            show.test();
        } catch (ClassNotFoundException e)
        {
            e.printStackTrace();
        } catch (InstantiationException e)
        {
            e.printStackTrace();
        } catch (IllegalAccessException e)
        {
            e.printStackTrace();
        }
    }
}
class Show
{
    public void test()
    {
        System.out.println("hello world!");
    }
}
  其中"kown.reflect.Show"是完整类名,就是包名加类的名字。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息