反射机制

反射机制

  • 什么是动态语言?
    当程序运行时,允许改变程序结构或变量类型,这种语言叫做动态语言,比如python。
    但是Java并不是一种动态语言,但是它有一套非常突出的动态相关机制,叫做reflection

Class类

  • Java中不是对象的东西?
    Static修饰的东西,属于类
    普通的数据类型,如int、char等
    其他的都是对象,连类本身,也是java.lang.Class的对象
  • 任何一个类都是Class类的实例化对象,这种实例化对象有三种表达方式:
F f = new F() ; 
Class c1 = F.class;  //1. 任何一个类都有一个隐含的静态成员变量class
Class c2 = f.getClass();  //2. 已知该类的对象的情况下,通过getClass()方法获取
Class c3 = null;
C3 = Class.forName(“com.text.F”); //3. 类的全称
  • 通过类的类类型创建该类的对象实例:
Foo foo = (Foo) c1.getNewInstance()

方法的反射

  • Class有一个最简单的方法,getName()
  • Method类:所有方法是Method类的对象
  • 通过方法的反射的相关步骤:
    获取该类的类类型
    通过该类类型获取该类的方法
    循环遍历所获取到的方法
    通过这些方法的getReturnType得到返回值类型的类类型,又通过该类类型得到返回值的名字
    getName()得到方法的名称,getParameterTypes()获得这个方法里面的参数类型的类类型

成员变量的反射

成员变量是java.lang.reflect.Field类的对象,通过getFields()方法获取所有public的成员变量的信息,通过getDeclaredFields()获取自己声明的成员变量

构造函数的放射

构造函数是Constructor类的对象
Class c = obj.getClass();
Constructor[] cs = c.getDeclaredConstructors();
Class[] paramTypes = constructor.getParameterTypes();

Class类的动态加载类

编译时刻加载的类是静态加载,运行时刻加载的类是动态加载。需要的时候再生成

Stand s = (Stand) cl.newInstance();
Class B implements Stand{
Public void start(){
System.out.print("B...satrt");}}

参考:http://www.importnew.com/23560.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容