java 反射机制

本文通过两个Java类实例详细介绍了如何使用Java的反射机制。反射机制允许程序在运行时获取类的信息并操作类的对象。文章展示了如何通过类名获取Class对象,如何获取方法对象并调用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自:http://jackleliu.spaces.live.com/blog/cns!426307897fa1054e!125.entry

10月25日
java的reflect机制(反射)
为了学习reflect,特意写了两个类,我觉得反射最重要的就是通过方法名调用方法.
一个被调用的类,和一个 利用reflect的调用类.
PlainJavaClass.java:
package reflect;
public class PlainJavaClass {
public int a = 2;
public int b = 3;
public PlainJavaClass()
{

}
public PlainJavaClass(int a,int b)
{
this.a = a;
this.b = b;
}
public int add()
{
return a + b;
}
public int plus(int a, int b)
{
return a-b;
}
}

ReflectJavaClass.java:

package reflect;
import java.lang.reflect.*;
public class ReflectJavaClass {
public void invokePlain() {
Class Plain = null;
Method add = null;
Method plus = null;
Class[] plusPara = {int.class,int.class};
Object[] transPlusPara = {new Integer(50),new Integer(20)};
Object addReturnObj = null;
Object plusReturnObj = null;
try {
Plain = Class.forName("reflect.PlainJavaClass");
} catch (ClassNotFoundException e) {
e.printStackTrace();
return;
}

try {
add = Plain.getDeclaredMethod("add",null);
plus = Plain.getDeclaredMethod("plus",plusPara);
} catch (SecurityException e) {
e.printStackTrace();
return;
} catch (NoSuchMethodException e) {
e.printStackTrace();
return;
}
try {
addReturnObj = add.invoke(new PlainJavaClass(5,2),null);
plusReturnObj = plus.invoke(new PlainJavaClass(),transPlusPara);
} catch (IllegalArgumentException e) {
e.printStackTrace();
return;
} catch (IllegalAccessException e) {
e.printStackTrace();
return;
} catch (InvocationTargetException e) {
e.printStackTrace();
return;
}
Integer addReturnValue = (Integer)addReturnObj;
Integer plusReturnValue = (Integer)plusReturnObj;
System.out.println("return value :"+addReturnValue);
System.out.println("return value :"+plusReturnValue);
}
public static void main(String[] args)
{
new ReflectJavaClass(). invokePlain();
}
}
  可以看出是第2个类来调用第一个类.
  要利用java的reflect首先要取得PlainJavaClass对应的Class对象:Plain = Class.forName("reflect.PlainJavaClass"),注意其中的reflect.PlainJavaClass类名称中包名reflect不能缺少.
  得到Plain之后就可以得到Plain中定义的某个方法,add=Plain.getDeclaredMethod("add",null);或者plus = Plain.getDeclaredMethod("plus",plusPara);其中第一个参数是方法名(String),第2个是参数的类型数组(Class[]).
  得到了Method对象就可以调用了.addReturnObj = add.invoke(new PlainJavaClass(5,2),null);或者plusReturnObj = plus.invoke(new PlainJavaClass(),transPlusPara); ,invoke第一个参数是方法所在对象(Object),第2个参数是方法传进去的参数值(Objec[]).
  方法调用之后可以得到相应的返回值:
Integer addReturnValue = (Integer)addReturnObj;
Integer plusReturnValue = (Integer)plusReturnObj;
System.out.println("return value :"+addReturnValue);
System.out.println("return value :"+plusReturnValue);  
  运行结果如下:
return value :7
return value :30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值