黑马程序员技术交流社区

标题: 反射获得构造方法 [打印本页]

作者: 张聪珉    时间: 2013-8-24 13:05
标题: 反射获得构造方法
本帖最后由 forward 于 2013-8-24 20:21 编辑

高新里面,通过这一句话获得String类的某一个构造方法,Constructor constructor1 = String.class.getConstructor(StringBuffer.class);为什么括号里的参数类型要用字节码来表示,而不是(StringBuffer  sb),这个地方不懂,求解释。。。。。

作者: gulup    时间: 2013-8-24 13:06
你要获取的构造方法,并不是属于某个对象的,而是属于某个类的。
所以参数类型应当是类,即class
作者: javamov    时间: 2013-8-24 13:45
问题:Constructor constructor1 = String.class.getConstructor(StringBuffer.class);为什么括号里的参数类型要用字节码来表示,而不是(StringBuffer  sb),这个地方不懂,求解释。。。。。
解答:参数是Class<?> 类型,表示任何实例对象的Class的对象。
StringBuffer sb 不是对象

作者: HM张博文    时间: 2013-8-24 15:42
getConstructor()方法的参数是一个字节码文件,字节码文件都是*.class这样的格式的,你可以查下API;至于你说的参数类型(StringBuffer  sb),只有在定义的时候才那样搞,调用的时候是不那样搞的
作者: 米中之玉    时间: 2013-8-24 16:34
为什么Class类的getConstructor()方法的参数用Class类型,而不用普通常用类型,我是这么理解的:
1、加强对Class类的应用。
2、获得构造函数,必须得知道参数类型,
若是得到的是普通参数,那么该方法内还的自己去获得参数的字节码。
3、假如方法的参数真的是普通类型了,那咱们调用的时候该传递什么值呢?
假如参数是(StringBuffer  sb)了,是不是传什么值都可以,只要是StringBuffer类型的就行。
但函数要了这些参数有什么用呢?函数只是想要知道参数的类型而已。
4、定义方法,一般都是从需求考虑,要是让咱们去定义这个函数,恐怕也会把参数定义成这样。

在学习中,有时候“换位思考”挺重要的。

作者: breaveheart    时间: 2013-8-24 17:42
米中之玉 发表于 2013-8-24 16:34
为什么Class类的getConstructor()方法的参数用Class类型,而不用普通常用类型,我是这么理解的:
1、加强对 ...

说得好,有种顿悟的感觉,我也不太理解这儿。哈哈。

作者: 米中之玉    时间: 2013-8-24 19:08
breaveheart 发表于 2013-8-24 17:42
说得好,有种顿悟的感觉,我也不太理解这儿。哈哈。

以前我也遇到过类似的问题,也是向别人求教才明白。嘿嘿

作者: 杨增坤    时间: 2013-8-24 19:23
String.class.getConstructor(StringBuffer.class);中的参数是指定的是构造方法中参数的类型,而不是参数的值,返回值是一个构造方法然后强制类型转换,然后可以用此来获得实例,你可以查看API文档,就更清楚了
String s=(String)String.class.getConstructor(String.class).newInstance("ss");
          System.out.println(s);
结果就是:ss
希望你能理解
作者: 杨增坤    时间: 2013-8-24 20:11
如果问题解决了,请把问题的未解决更改为已解决
谢谢合作!




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