黑马程序员技术交流社区
标题:
有关反射的问题
[打印本页]
作者:
luofeng
时间:
2014-9-19 23:43
标题:
有关反射的问题
为什么存在constructor类,它是为了解决什么问题?刚看到反射,看的不太懂。
作者:
Huberry
时间:
2014-9-20 00:57
Constructor是描述构造方法的一个类,可以用反射获取某个类(这个类是你所要操作的类)中的某个构造方法对应的Constructor对象,再由这个对象调用newInstance()方法就可以创建出一个此类的实例对象
作者:
daoqin
时间:
2014-9-20 14:59
那是构造函数
作者:
王文博
时间:
2014-9-20 23:25
本帖最后由 王文博 于 2014-9-20 23:41 编辑
<p><p><p>个人总结了一下,不知道你能不能看得懂。</p><p>
Constructor类代表某个类中的一个构造方法;</p><p>
import java.lang.reflect.Constructor;
得到某个类中所有的构造方法:
public class Reflect
{
public static void main(String[] args) throws Exception
{
/* new String(new StringBuilder("abc"));
* 用StringBuilder对象传给String构造方法,用这个构造方法在new String()
* 现在我们要用反射的方式,实现同样的效果:
* 先拿到构造方法:String.class代表一个字节码(对象),对象名.getConstructor拿到这个类的构造方法
* 再拿到这个构造方法里的参数StringBuilder类型,最后返回给这个对象的相对应的类型 Constructor
*/
Constructor cons = String.class.getConstructor(StringBuilder.class);
/* 这俩行代码用了俩个StingBuilder,第一个表示:StringBuilder选择什么参数的构造方法[是类型] </p><p> * 第二个表示:用这个构造方法时候还要传递与之对应的对象进去[是对象]
* newInstance是new一个构造方法,如果里面有参数一定不能忘了写![cons.newInstance("abc");错误示范]
*/
String str = (String)cons.newInstance(new StringBuilder("abc"));
System.out.println(str.charAt(2)); //c
/*
* 分析这三行代码执行:
* 在编译期间,严格进行语法检查,并没有执行"="号右边的代码,只是生成二进制代码(0101),放进内存里,并没有执行;
* 编译期间只知道是一个构造方法,并不知道是哪个类上的构造方法,因为newInstance返回类型是Object</p><p> * 而这个构造方法返回的是String类型,所以要强制转换成相应类型;
* 在运行期间,才会执行"="号右边的代码,
*/
}
} </p>
复制代码
作者:
luofeng
时间:
2014-9-21 22:35
这个现在能懂了。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2