反射机制
(1)

反射机制(Reflection)

Reflectio允许程序在执行的期间借助ReflectionAPI取得任何类的内部信息,并能够直接操作任意对象的内部属性及方法。

    Class c    =Class.forName("java.lang.String")

既我们在加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象包含了类完整的的结构信息,我们可以通过这个对象看到类的结构,这个对象就宛如一面镜子。我们将这种现象称为反射。

获反射机制提供的功能

  • 运行时判断任意一个对象所属的类
  • 运行时构造任意一个类的对象
  • 运行时判断任意一个类所具有的成员变量和方法
  • 在运行时获取泛型信息
  • 在运行时调用任意一个对象的成员和方法
  • 在运行时处理注解
  • 动态代理生成
  • .......

反射的优缺点

优点:实现动态创建对象和编译,灵活度更高
缺点:对性能有一定影响。使用反射基本上是解释操作,相当于我们告诉JVM,我们希望做什么并且让它满足我们的要求。这类操作总是慢于直接执行相同的操作。

Class类

在Object类中定义了以下的方法,此方法将被所有子类继承

public final Class getClass()

这个方法的返回值是一个Class类,此类是Java反射的源头,实际上所谓反射从程序的运行结果来看也很好理解,即:可以通过对象反射求出类的名称。

Class类的常用方法

static ClassforName(String name)返回指定类名name的Class对象
Object newInstance()调用缺省构造函数,返回Class对象的一个实例
getName()返回此Class对象所表示的实体(类,接口,数组类或void)的名称。
Class getSuperClass()返回当前Class对象的父类的Class对象
Class[] getinterfaces()获取当前Class对象的接口
ClassLoader getClassLoader()返回该类的类加载器
Constructor[] getConstructors()返回一个包含某些Constructor对象的数组
Method getMothed(String name,Class.. T)返回一个Method对象,此对象的形参类型为paramType
Field[] getDeclaredFields()返回Field对象的一个数组
本文为作者valive发布,未经允许禁止转载!
上一篇 下一篇
评论
评论已关闭 >_<

评论已关闭