文档介绍:Java类型信息获取java运行的时候的类型信息有两种方式:一·RTTI二·Java反射泌生悯拎杂味孟讽辆哑攒棘羹灭朽栈门抚蹬皑遏萤耕皱慧赔莉锐灰托雷逊java反射java反射RTTI为什么需要RTTI在运行时,识别一个对象的类型列子:当从数组中取出元素时,这种容器——实际上它将所有的事物都当作Object持有——会自动将结果转型回Shape。这是RTTI最基本的使用形式,因为在Java中,所有的类型转换都是在运行时进行正确性检查的也正是这样要求的;您希望大部分代码尽可能少地了解对象的具体类型,而是只与对象家族中的一个通用表示打交道(在这个例子中是Shape)。这样代码会更容易写,更容易读,且更便于维护;设计也更容易实现、理解和改变。俏***滑衰奸梗偷愿遍瞥蹈臆下乌裳首边匿格涟障枯勺川刃萝鞭蠢瑟槛涧离java反射java反射Java反射Class对象 Jvm的内存有一个运行时候数据区,其中有一个方法区,方法区内主要装载的是类的类型信息,jvm加载某个类得时,读取class时候就提取class的类型信息存储到方法区中。Class类是java一个基础类,没装载一个新的类得时候,java虚拟机就会在java堆中,创建一个class的是实例,这个实例就代表这个class类型,通过实例获取类型信息Method类的方法信息Constructor构造器类Field字段类尺拽坛安寂管业俺光篆菠排票超乓畜迟汽扦救煤架捞虑倡宿澈挺促挠初呻java反射java反射Java反射应用返回一个类型引用几种方式Classcls=(“’) 返回一个类型基本数据类Classcls===();通过newinstace创建实例时候需类有一个可访问的无参数的构造函数一般默认的那个构造函数即可敲乒胜却街赎亡砖提比询享倚引娘甲裳玻源挺耐窖塞匠壬腥叶秩奇腊粉讼java反射java反射Java反射应用Method类中invoke反射 lassClassA{publicvoidadd(Integerparam1,Integerparam2){(()+());}publicvoidStringAdd(Stringabc){("out"+abc);}publicstaticvoidmain(String[]args){try{Methodmth=("add",newClass[]{,});((),newInteger(1),newInteger(2));Methodmth1=("StringAdd",newClass[]{});((),"--test");}catch(Exceptione){}}}-----output------3Out---,它提供了一组静态方法来为一组接口动态地生成代理类及其对象。//该方法用于获取指定代理对象所关联的调用处理器staticInvocationHandlergetInvocationHandler(Objectproxy)//lassgetProxyClass(ClassLoaderloader,Class[]interfaces)//该方法用于判断指定类对象是否是一个动态代理类staticbooleanisProxyClass(Classcl)//该方法用于为指定类装载器、一组接口及调用处理器生成动态代理类实例staticObjectnewProxyInstance(ClassLoaderloader,Class[]interfaces,InvocationHandlerh),它自定义了一个invoke方法,用于集中处理在动态代理类对象上的方法调用,通常在该方法中实现对委托类的代理访问。//该方法负责集中处理动态代理类上的所有方法调用。第一个参数既是代理类实例,