Ⅰ 用java的反射机制怎么获取一个类中里面方法中局部变量
publicclassPerson{
privateStringname;
privateintage;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
publicstaticvoidmain(String[]args){
try{
Classc=Class.forName(Person.class.getName());
//获取类的属性
Field[]fields=c.getDeclaredFields();
for(inti=0;i<fields.length;i++){
System.out.println("类的属性有:"+Modifier.toString(fields[i].getModifiers())+""+fields[i].getType()+""+fields[i].getName());
}
//获取类的方法
Method[]methods=c.getMethods();
for(intj=0;j<methods.length;j++){
System.out.println("类的方法有:"+Modifier.toString(methods[j].getModifiers())+""+methods[j].getReturnType()+""+methods[j].getName());
}
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
}
}
//运行结果如下:
类的属性有:privateclassjava.lang.Stringname
类的属性有:privateintage
类的方法有:publicstaticvoidmain
类的方法有:publicclassjava.lang.StringgetName
类的方法有:publicvoidsetName
类的方法有:publicvoidsetAge
类的方法有:publicintgetAge
类的方法有:publicfinalvoidwait
类的方法有:publicfinalvoidwait
类的方法有:publicfinalnativevoidwait
类的方法有:publicbooleanequals
类的方法有:publicclassjava.lang.StringtoString
类的方法有:publicnativeinthashCode
类的方法有:publicfinalnativeclassjava.lang.ClassgetClass
类的方法有:publicfinalnativevoidnotify
类的方法有:
Ⅱ java 通过反射怎么获取方法中参数值
方法中的参数是形参,形参只有类型没有值,只有调用方法的时候参数才有值,通过反射获取方法是获取的方法的定义,方法定义入参怎么会有参数值呢,只有参数类型啊。
Ⅲ java如何利用反射机制得到一个类中为数组类型的成员变量的值
写了个例子,请仔细查看代码,具体过程需要你自己对照java API 再研究,
先定义了一个普通的学生类,如下:
publicclassStudent{
privateintid;
privateStringname;
privateintage;
privateString[]aiHao;
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
publicString[]getAiHao(){
returnaiHao;
}
publicvoidsetAiHao(String[]aiHao){
this.aiHao=aiHao;
}
}
对学生类进行反射
publicclassTest3{
publicstaticvoidmain(String[]args){
Students=newStudent();
s.setId(1);
s.setName("张三");
s.setAge(23);
s.setAiHao(newString[]{"足球","篮球","上网"});
try{
//获取所有的变量
Field[]fields=Student.class.getDeclaredFields();
//循环处理变量
for(Fieldf:fields){
f.setAccessible(true);
Objectvalue=f.get(s);//取变量的值
System.out.print("变量名称为:"+f.getName());
if(value.getClass().isArray()){//判断是否是数组
Object[]arr=(Object[])value;//装换成数组
System.out.println(",变量值等于:"+Arrays.toString(arr));
//这里还可以做额外处理,判断数组的类型如下面注释的代码
/*
for(Objecta:arr){
System.out.println("参数类型"+a.getClass().getName());
//同样运用反射的机制做额外处理
}
*/
}else{
//非数组类型,普通处理
System.out.println(",变量值等于:"+value);
}
f.setAccessible(false);
}
}catch(Exceptione){
e.printStackTrace();
}
}
}
Ⅳ java 通过反射怎么获取方法中参数值
public <T> T invokeMethod(String beanName, String methodName,
Class<?>[] paramTypes, Object... parameters) {
try {
Object bean = ApplicationContextHolder.getBean(beanName);
Class<? extends Object> beanClass = bean.getClass();
// Method method = beanClass.getDeclaredMethod(methodName,
// paramTypes);
// Method m0 = ClassUtils.getPublicMethod(beanClass, beanName,
// paramTypes);
Method method = null;
Method[] ms = beanClass.getMethods();
for (Method m : ms) {
String mName = m.getName();
if (StringUtils.equals(methodName, mName)) {
boolean isThis = true;
Class<?>[] pt = m.getParameterTypes();
if (paramTypes.length == pt.length) {
int plength = paramTypes.length;
if (plength == 0) {
isThis = true;
} else {
for (int i = 0; i < plength; i++) {
boolean ff = pt[i]
.isAssignableFrom(paramTypes[i]);
if (!ff) {
isThis = false;
break;
}
}
}
} else {
isThis = false;
}
if (isThis) {
method = m;
break;
}
}
}
if (method == null) {
throw new NoSuchMethodException(beanName + "." + methodName);
}
Object obj = null;
if (parameters == null || parameters.length < 1) {
obj = method.invoke(bean);
} else {
obj = method.invoke(bean, parameters);
}
T out = (T) obj;
return out;
} catch (SecurityException e) {
log.error(DataTypeConstant.MOD_CODE_SUBTYPE2, "", e);
} catch (IllegalArgumentException e) {
log.error(DataTypeConstant.MOD_CODE_SUBTYPE2, "", e);
} catch (IllegalAccessException e) {
log.error(DataTypeConstant.MOD_CODE_SUBTYPE2, "", e);
} catch (InvocationTargetException e) {
log.error(DataTypeConstant.MOD_CODE_SUBTYPE2, "", e);
} catch (NoSuchMethodException e) {
log.error(DataTypeConstant.MOD_CODE_SUBTYPE2, "", e);
}
return null;
}
上面是一个完整的通过bean的名称和方法名称来调用该bean下的一个方法的方法。应该对你有所帮助!
Ⅳ java 通过反射怎么获取方法中参数值
答案是没法获取。
首先反射获取的是类、属性、或者方法的定义,就拿方法来说,方法的定义是什么呢?
方法的定义包括:方法名,方法的参数类型列表,方法的返回值类型。
方法的参数类型列表包括什么呢?
包括每个参数的顺序和参数类型。
参数值是什么?是在这个方法被调用的时候传入的参数叫做参数值。反射呢,是获取的它的定义,并不牵扯调用,所以说没法获取。
Ⅵ 反射--静态成员变量的值获取
public class Student{
private static int age;
}
Field field = Student.class.getDeclaredField("age");
field.setAccessible(true);
field.get(null); 普通属性获取值 需要传入对象,但是静态属性 不需要传入具体对象,传
null 也可以获取 该字段的值。
Ⅶ 大佬告诉我java 反射如何获取成员变量的值
下例演示了通过反射获取 Test 类对象 t 的 iVal, strVal 成员变量的值:
importjava.lang.reflect.Field;
classTest{
privateintiVal;
privateStringstrVal;
publicTest(intiVal,StringstrVal){
this.iVal=iVal;
this.strVal=strVal;
}
}
publicclassApp{
publicstaticvoidmain(String[]args){
//创建一个Test对象
Testt=newTest(123,"Hello");
//获取对象t的Class
Class<?>tt=t.getClass();
try{
//获取Test类的iVal字段Field
Fieldfield=tt.getDeclaredField("iVal");
//设置可访问
field.setAccessible(true);
//获取iVal的值
intval=field.getInt(t);
System.out.println(val);
FieldstrValField=tt.getDeclaredField("strVal");
strValField.setAccessible(true);
StringstrVal=(String)strValField.get(t);
System.out.println(strVal);
}catch(NoSuchFieldException|SecurityExceptione){
e.printStackTrace();
}catch(IllegalArgumentExceptione){
e.printStackTrace();
}catch(IllegalAccessExceptione){
e.printStackTrace();
}
}
}
Ⅷ java 通过反射怎么获取方法中参数值
Class<?>clazz=object.getClass();
Method[]ms=clazz.getMethods();
for(inti=0;i<ms.length;i++){
System.out.println("方法名:"+ms[i].getName());
Type[]t=ms[i].getGenericParameterTypes();//获取参数类型,至于你说的获取参数值,我没明白
}
Ⅸ java 通过反射怎么获取方法中参数值
id只是形参,调用函数的时候传进去的才是实参
也就是你使用这个函数传进去的具体的值,这是你自己传进去的