Java反射API

Java Reflection是在运行时检查或修改类的运行时行为的过程。
java.lang.Class类提供了许多方法, 可用于获取元数据, 检查和更改类的运行时行为。
java.lang和java.lang.reflect包提供了Java反射的类。
使用地点
Reflection API主要用于:

  • IDE(集成开发环境), 例如Eclipse, MyEclipse, NetBeans等
  • 调试器
  • 测试工具等
【Java反射API】你知道吗 ?
java.lang.Class类
java.lang.Class类主要执行两个任务:
  • 提供在运行时获取类的元数据的方法。
  • 提供检查和更改类的运行时行为的方法。
如何获得Class类的对象?
有3种方法获取Class类的实例。它们如下:
  • Class类的forName()方法
  • Object类的getClass()方法
  • .class语法
1)Class类的forName()方法
  • 用于动态加载类。
  • 返回Class类的实例。
  • 如果你知道类的完全限定名称, 则应使用此名称。不能将其用于原始类型。
让我们看一下forName()方法的简单示例。
class Simple{}class Test{ public static void main(String args[]){ Class c=Class.forName("Simple"); System.out.println(c.getName()); } }

Simple

2)Object类的getClass()方法
它返回Class类的实例。如果你知道类型, 则应使用它。而且, 它可以与原语一起使用。
class Simple{}class Test{ void printName(Object obj){ Class c=obj.getClass(); System.out.println(c.getName()); } public static void main(String args[]){ Simple s=new Simple(); Test t=new Test(); t.printName(s); } }

Simple

3).class语法
如果类型可用但没有实例, 则可以通过在类型名称后附加“ .class”来获得Class。它也可以用于原始数据类型。
class Test{ public static void main(String args[]){ Class c = boolean.class; System.out.println(c.getName()); Class c2 = Test.class; System.out.println(c2.getName()); } }

boolean Test

确定类对象
以下Class类方法用于确定类对象:
1)public boolean isInterface():确定指定的Class对象是否表示接口类型。
2)public boolean isArray():确定此Class对象是否表示数组类。
3)public boolean isPrimitive():确定指定的Class对象是否表示原始类型。
让我们看一下反射API确定对象类型的简单示例。
class Simple{} interface My{}class Test{ public static void main(String args[]){ try{ Class c=Class.forName("Simple"); System.out.println(c.isInterface()); Class c2=Class.forName("My"); System.out.println(c2.isInterface()); }catch(Exception e){System.out.println(e); } } }

false true

    推荐阅读