可变参数
它被调用的时候, 编译器会将它当做一个数组.在访问的时候,也是以数组的形式来用.
获取 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呢? |