您的位置:首页 > 编程语言 > Java开发

关于java反射机制

2011-02-02 10:59 232 查看
反射就是将java类中的各个成分映射成为java类来进行操作。它提供了一种动态的功能,使我们可以在运行时获取类的信息。JVM为每个类创建一个Class类的实例,它包含了一个java类的全部信息,例如类名、方法(Method)、属性(Field)、构造器(Constructor)等。通过Class,我们就可以对这些信息进行操作。

在java中,反射的实现还依赖于java.lang.reflect包中的接口、类。Structs、Spring、Hibernate等框架,都是基于这些反射API来实现其动态功能的。

下面通过一些例子来说明:

获取Class类的3种方法

Class.forName("com.test.Example"); 使用完整包名

Class<Example> clazz = Example.class; 静态属性

Example ex = new Example();

Class<Example> exclass = ex.getClass(); 调用getClass方法

测试类

class Test{

private String ha;

private int num;

public Test(){

super();

}

public Test(String ha,int num){

super();

this.ha=ha;

this.num=num;

}

public void me(){

System.out.println("happy new year!");

}

}

(1)Field

Test test = new Test("hi",100);

Field field = test.getClass().getDeclaredField("num");

int num1 = (Integer)field.get(test);

(2)Method

Class<Test> exclass = Test.class;

try{

Method m = exclass.getDeclaredMethod("me");

if(m!=null){

Test test = exclass.newInstance();

m.invoke(test); //test对象 调用此Method对象表示的底层方法,即方法me()

}

}catch(Exception e){

e.printStackTrace();
}

(3)Constructor

Class<Test> exclass = Test.class;

Test test = exclass.newInstance();

Constructor<Test> con = exclass.getConstructor(String.class,int.class);

test = con.newInstance("world",180); //用构造器创建对象

System.out.println(test); //打印信息

(4)访问私有成员

Field field = exclass.getDeclaredField("ha");

field.setAccessible(true); //设置可访问属性为true,即在使用时取消java语言访问检查

System.out.println(field.get(test)); //打印test对象上此Field表示的字段值,即ha的值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: