A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙斌 黑马帝   /  2011-7-23 17:33  /  2047 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

不太明白反射中的Constructor类,反射中的Constructor类如何用呢?
[ 本帖最后由 孙斌 于 2011-07-23  17:44 编辑 ]

5 个回复

倒序浏览
黑马网友  发表于 2011-7-23 17:59:13
沙发

回复 楼主 的帖子

用Constructor的getDeclaredConstructor()方法获得它的构造器再用这个构造器调用newInstance();方法可以实例化对象
回复 使用道具 举报
黑马网友  发表于 2011-7-23 18:08:59
藤椅
这个,你把视频看第二次的时候就有感觉了。我之前也是昏的。
一个类,有构造方法,有成员变量,有成员方法,
对应的,反射也有构造方法的反射,成员变量的反射,成员方法的反射
而Constructor类正是构造方法的反射的应用。
回复 使用道具 举报
黑马网友  发表于 2011-7-23 20:15:22
板凳
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:57
报纸
[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:12
地板

十分感谢!

谢谢各位的解答,尤其是看了张炜的代码,我明白了很多!:handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马