📅  最后修改于: 2020-10-01 05:45:54             🧑  作者: Mango
Java Reflection是在运行时检查或修改类的运行时行为的过程。
java.lang.Class类提供了许多方法,可用于获取元数据,检查和更改类的运行时行为。
java.lang和java.lang.reflect包提供了Java反射的类。
Reflection API主要用于:
java.lang.Class类主要执行两个任务:
有3种方法获取Class类的实例。它们如下:
让我们看一下forName()方法的简单示例。
class Simple{}
class Test{
public static void main(String args[]){
Class c=Class.forName("Simple");
System.out.println(c.getName());
}
}
Simple
它返回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
如果类型可用但没有实例,则可以通过在类型名称后附加“ .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