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
评论前必须登录!
注册