黑马程序员技术交流社区

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

作者: 孙斌    时间: 2011-7-23 17:33
标题: 反射中的Constructor类
不太明白反射中的Constructor类,反射中的Constructor类如何用呢?
[ 本帖最后由 孙斌 于 2011-07-23  17:44 编辑 ]
作者: 匿名    时间: 2011-7-23 17:59
标题: 回复 楼主 的帖子
用Constructor的getDeclaredConstructor()方法获得它的构造器再用这个构造器调用newInstance();方法可以实例化对象
作者: 匿名    时间: 2011-7-23 18:08
这个,你把视频看第二次的时候就有感觉了。我之前也是昏的。
一个类,有构造方法,有成员变量,有成员方法,
对应的,反射也有构造方法的反射,成员变量的反射,成员方法的反射
而Constructor类正是构造方法的反射的应用。
作者: 匿名    时间: 2011-7-23 20:15
Constructor类代表某个类中的一个构造方法
得到某个类所有的构造方法:
例子:Constructor[] constructors=Class.forName("java.lang.String").getConstructor();
得到某一个构造方法:
例子: Constructor constructor=Class.forName("java.lang.String").getConstructor(StringBuffer.class);  //获得方法时要用到类型
创建实例对象:
通常方式:String str=new String(new StringBuffer("abc"));
反射方式:String str=(String)constructor.newInstance(new StringBuffer("abc")); //调用获得的方法时要用到上面相同类型的实例对象
Class.newInstance()方法:
例子: String obj=(String)Class.forName("java.lang.String").newInstance();
该方法内部先得到默认的构造方法,然后用该构造方法构造实例对象。
作者: 匿名    时间: 2011-7-23 20:41
[code]import java.lang.reflect.*;
public class TestConstructor {
        public static void main(String[] args) throws IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
                Constructor[] con=dog.class.getConstructors();
                for(Constructor conn:con){
                        System.out.println(conn);
                }
                dog a=dog.class.getConstructor(String.class,int.class).newInstance("My pretty little dog",5);

        }
}
class dog {
        public dog(){}
        public dog(String dogage){}
        public dog(String dogname, int dogage) {
                System.out.println(dogname+" was "+dogage+" years old~.. haha");
        }
        public dog(int dogage){}
}[/code]就是简单的得到构造方法,然后在执行实例化的操作呗

打印出来的结果是
public dog()
public dog(java.lang.String)
public dog(java.lang.String,int)
public dog(int)
My pretty little dog was 5 years old~.. haha
作者: 匿名    时间: 2011-7-23 21:18
标题: 十分感谢!
谢谢各位的解答,尤其是看了张炜的代码,我明白了很多!:handshake




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