黑马程序员技术交流社区

标题: 反射中实例化的问题。 [打印本页]

作者: lengmianluocha    时间: 2013-8-15 22:54
标题: 反射中实例化的问题。
本帖最后由 lengmianluocha 于 2013-8-24 21:47 编辑

通过反射有两种方式来创建实例化对象,针对于第二种方式,有代码如下:
  1. Constructor constructor = Class.forName("java.lang.String").getConstructor(StringBuffer.class);

复制代码
代码第一行getConstructor()的参数是StringBuffer.class,在反射中,这不是获取Class对象的一个方式么?为什么很多参数都是这种形式的?

第二行代码要怎么解释呢?
  1. String str = (String)Constructor.newInstance(new Stringbuffer("abc"));
复制代码

作者: 神之梦    时间: 2013-8-15 23:52
第二行代码呢?
作者: lengmianluocha    时间: 2013-8-15 23:57
神之梦 发表于 2013-8-15 23:52
第二行代码呢?

不好意思,丢人了。

作者: 施大勇    时间: 2013-8-18 17:24
Class.forName("java.lang.String")这个是生成String 类的Class对象,而在java反射机制中几乎所有的方法参数都是使用的Class对象 ,如 getConstructor(StringBuffer.class)。
可以这样认为JAVA中的万物均为对象:类,构造方法,普通方法,属性,字段,接口等等,它们在java中都可以对应一个java对象,那么这时同种对象就向上抽出了各种类,像字段类,方法类等,但是具体应用时就要确定这个对象到底对应哪一个方法,这时就需要方法的参数了,而现在采用的是反射机制,所以参数的类型都为*.class对象。




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