📜  Java Reflection API

📅  最后修改于: 2020-10-01 05:45:54             🧑  作者: Mango

Java反射API

Java Reflection是在运行时检查或修改类的运行时行为的过程。

java.lang.Class类提供了许多方法,可用于获取元数据,检查和更改类的运行时行为。

java.lang和java.lang.reflect包提供了Java反射的类。

使用地点

Reflection API主要用于:

  • IDE(集成开发环境),例如Eclipse,MyEclipse,NetBeans等。
  • 调试器
  • 测试工具等

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