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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张聪珉 中级黑马   /  2013-8-24 13:05  /  1315 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 forward 于 2013-8-24 20:21 编辑

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

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

8 个回复

倒序浏览
你要获取的构造方法,并不是属于某个对象的,而是属于某个类的。
所以参数类型应当是类,即class
回复 使用道具 举报
问题:Constructor constructor1 = String.class.getConstructor(StringBuffer.class);为什么括号里的参数类型要用字节码来表示,而不是(StringBuffer  sb),这个地方不懂,求解释。。。。。
解答:参数是Class<?> 类型,表示任何实例对象的Class的对象。
StringBuffer sb 不是对象
回复 使用道具 举报
getConstructor()方法的参数是一个字节码文件,字节码文件都是*.class这样的格式的,你可以查下API;至于你说的参数类型(StringBuffer  sb),只有在定义的时候才那样搞,调用的时候是不那样搞的
回复 使用道具 举报
为什么Class类的getConstructor()方法的参数用Class类型,而不用普通常用类型,我是这么理解的:
1、加强对Class类的应用。
2、获得构造函数,必须得知道参数类型,
若是得到的是普通参数,那么该方法内还的自己去获得参数的字节码。
3、假如方法的参数真的是普通类型了,那咱们调用的时候该传递什么值呢?
假如参数是(StringBuffer  sb)了,是不是传什么值都可以,只要是StringBuffer类型的就行。
但函数要了这些参数有什么用呢?函数只是想要知道参数的类型而已。
4、定义方法,一般都是从需求考虑,要是让咱们去定义这个函数,恐怕也会把参数定义成这样。

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

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
米中之玉 发表于 2013-8-24 16:34
为什么Class类的getConstructor()方法的参数用Class类型,而不用普通常用类型,我是这么理解的:
1、加强对 ...

说得好,有种顿悟的感觉,我也不太理解这儿。哈哈。
回复 使用道具 举报
breaveheart 发表于 2013-8-24 17:42
说得好,有种顿悟的感觉,我也不太理解这儿。哈哈。

以前我也遇到过类似的问题,也是向别人求教才明白。嘿嘿
回复 使用道具 举报
String.class.getConstructor(StringBuffer.class);中的参数是指定的是构造方法中参数的类型,而不是参数的值,返回值是一个构造方法然后强制类型转换,然后可以用此来获得实例,你可以查看API文档,就更清楚了
String s=(String)String.class.getConstructor(String.class).newInstance("ss");
          System.out.println(s);
结果就是:ss
希望你能理解

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
如果问题解决了,请把问题的未解决更改为已解决
谢谢合作!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马