黑马程序员技术交流社区
标题:
反射 Class class constructor 啥的 怎么理解啊
[打印本页]
作者:
胡焱老师
时间:
2014-3-22 23:25
标题:
反射 Class class constructor 啥的 怎么理解啊
请路过的大神用直白的话解释下哈!!! 本人小白 零基础
作者:
上官睿鹏
时间:
2014-3-22 23:32
本帖最后由 上官睿鹏 于 2014-3-22 23:37 编辑
Class是本身就是一个类,而class是用来定义一个类,Constructor也是一个类里面有很多方法。比如对象调用
getConstructors()就会返回Constructor对象,也就是调用该方法的对象的构造方法拿去运行看下结果吧
class Demo
{
public static void main(String[] args)throws Exception
{
Class c = String.class;
System.out.println(c);
Constructor[] cons = c.getConstructors(); //返回String类的所有构造方法
for(Constructor co : cons)
{
System.out.println(co);
}
}
复制代码
作者:
米奇
时间:
2014-3-23 10:25
可变参数
它被调用的时候, 编译器会将它当做一个数组.在访问的时候,也是以数组的形式来用.
获取 Class 对象的方式 :
当类(例如String)已经被加载到内存中时,有两种方式:
String.class
Class.forName(“java.lang.String”)
当类还没有加载到内存中时,需要先用类加载器,或者一个对象来调用:
new SomeClass().getClass()
创建动态代理的步骤:
1,用Class proxyClass = Proxy.getProxyClass(); 创建proxy在内存中的class文件.
2,用这个class文件.getConstructor().getNewInstance() 来获取Proxy的对象.
(这里可以不可以直接new出来呢?)
Class和Constructor的对象都有newInstance吗?
查了下API,是的.Constructor只创建这个class的对象.
Constructor是返回一个Object的对象.
getConstructor的参数接受的是参数的类型的class文件.
Constructor对象的newInstance返回的是Object对象.
要用到Proxy类,现在我只知道它跟动态代理有点关系.它在java.lang.reflect这个包中.
它创建了一个接口的代理.
Proxy(InvocationHandler h)
那么这个是那个用字节码文件返回的构造方法吗?
嗯,构造方法返回的是Proxy的对象.
而Proxy.getProxyClass()则是返回Proxy的字节码文件,这句话在内存中生成了字节码文件,虽然它还没有对象.
那获取构造方法,我可不可以直接 Proxy p = new Proxy(h)呢?
为什么张孝祥要用反射来获取构造方法呢?嗯,刚才测试了.
既然可以通过API直接查Proxy的构造方法,那为什么还要用class.getConstructor呢?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2