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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

请路过的大神用直白的话解释下哈!!!   本人小白    零基础

2 个回复

正序浏览
可变参数

它被调用的时候, 编译器会将它当做一个数组.在访问的时候,也是以数组的形式来用.



获取 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呢?

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 上官睿鹏 于 2014-3-22 23:37 编辑

Class是本身就是一个类,而class是用来定义一个类,Constructor也是一个类里面有很多方法。比如对象调用
getConstructors()就会返回Constructor对象,也就是调用该方法的对象的构造方法拿去运行看下结果吧
  1. class Demo
  2. {
  3.         public static void main(String[] args)throws Exception
  4.         {
  5.                 Class c = String.class;   


  6.                 System.out.println(c);
  7.         
  8.                 Constructor[] cons = c.getConstructors();   //返回String类的所有构造方法
  9.                 for(Constructor co : cons)
  10.                 {
  11.                         System.out.println(co);
  12.                 }
  13.                
  14.         }
复制代码




评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马