关于java反射机制

  反射就是将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的值

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值