黑马程序员技术交流社区

标题: 反射的Constructor类问题 [打印本页]

作者: 周洋    时间: 2012-3-12 16:27
标题: 反射的Constructor类问题
不太明白反射中的Constructor类,反射中的Constructor类如何用呢?
视频没听明白  求解
作者: 李明伟    时间: 2012-3-12 16:40
反射中的构造函数类可以获取某个类的构造函数,并用它创建类的实例:
例如:

1,反射使用无参数的构造函数生成实例
2,反射使用一个字符串参数的构造函数生成实例
3,反射使用一个字符串参数的方法生成方法并调用

package test.jdbc.reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class ReflectTest {
    public static void main(String[] args) throws Exception {

        // 反射使用无参数的构造函数生成实例
        Object o = getObj(Bean1.class);
        ((Bean1) o).message();
        // 反射使用一个字符串参数的构造函数生成实例
        o = getObj(Bean1.class, "HELL FIRE");
        ((Bean1) o).message();
        // 反射使用一个字符串参数的方法生成方法并调用
        getObjMed(Bean1.class, "helloworld", "中国");   
    }

    public static Object getObj(Class clazz) throws Exception {
        Constructor con = clazz.getConstructor();
        return con.newInstance();
    }

    public static Object getObj(Class clazz, String param) throws Exception {
        Constructor con = clazz.getConstructor(String.class);
        return con.newInstance(param);
    }

    public static void getObjMed(Class clazz, String name, String param)
            throws Exception {
        Constructor con = clazz.getConstructor(String.class);
        Method m = clazz.getMethod(name, String.class);
        m.invoke(getObj(clazz), param);
    }
}

class Bean1 {
    private String name = null;

    public Bean1() {

    }

    public Bean1(String name) {
        this.name = name;
    }

    public void message() {
        System.out.println(" name is " + this.name);
        System.out.println("Hello world!");
    }

    public void helloworld(String name) {
        System.out.println("hi " + name + " ! This is a nice world!");
    }
}

运行结果:
name is null
Hello world!
name is HELL FIRE
Hello world!
hi 中国 ! This is a nice world!
作者: lipanfeng    时间: 2012-3-12 19:24
Constructor我们可以理解为:封装了某个类中的所有的构造函数的这么一个类。它的功能主要是创建对象,获取属性值和为属性赋值。因为类中包含有参和无参的构造函数,然后根据参数个数和类型创建相应的对象。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2