java 反射 getclass_java 反射getClass .class 的使用方法示例

本文实例讲述了java 反射getClass .class 的使用方法。分享给大家供大家参考,具体如下:

java反射机制

怎么从一个实例上的获得类反射

/**

* obj 实例的对象

* getClass() 获得该实例类的反射

* @return

* Class extends Object>

*/

obj.getClass();

//例子

String str1 = "123";

Class> strClass1 = str1.getClass();

String str2 = new String("456");

Class> strClass2 = str2.getClass();

怎么从一个类上获得类的反射

/**

* ClassName 类名称

* .class 该类的属性

* @return

* Class extends Object>

*/

ClassName.class

//例子

Class> a = String.class

Class> b = Integer.class

Class> c = Double.class

package Main;

import java.lang.reflect.Field;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import java.lang.reflect.Modifier;

import java.util.Arrays;

import Demo.Demo1;

public class Index

{

public static void main(String[] agrs) throws Exception

{

Demo1 obj = new Demo1();

String str = (String)runTargetMethod(obj,"test1",new Class[]{String.class,String.class},new Object[]{"2","3"});

System.out.println(str);

System.out.println();

System.out.println();

System.out.println();

dumpTargetMethod(obj);

}

/**

* 调用指定对象的指定方法。

* @param Object obj 对象实例

* @param String methodName 要调用的方法名称

* @param Class>[] classes 方法中的参数对象

* @param Object[] valObj 需要向参数中传递的值

* @return Object 直接结果

* */

public static Object runTargetMethod(Object obj,String methodName,Class>[] classes,Object[] valObj) throws Exception

{

Class> classObj = obj.getClass();

Method method = classObj.getMethod(methodName,classes);

return method.invoke(obj, valObj);

}

/**

* 打印对象内容

* @param Object obj 对象实例

* @throws IllegalAccessException

* @throws IllegalArgumentException

* */

public static void dumpTargetMethod(Object obj) throws IllegalArgumentException, IllegalAccessException

{

Class> classObj = obj.getClass();

System.out.println("-------------------method dump-------------------------");

Method[] methods = classObj.getDeclaredMethods();

for(Method method : methods)

{

Class>[] parameters = method.getParameterTypes();

StringBuffer strBuffer = new StringBuffer();

for(int i=0;i

{

if(i < (parameters.length - 1))

strBuffer.append(parameters[i].getName() + ",");

else

strBuffer.append(parameters[i].getName());

}

if(!strBuffer.toString().isEmpty())

{

System.out.println("method info (method modifier : " + Modifier.toString(method.getModifiers()) + " method return type : " + method.getReturnType().getName() + " method name : " + method.getName() + " parameters : " + strBuffer.toString() + ")");

}else{

System.out.println("method info (method modifier : " + Modifier.toString(method.getModifiers()) + " method return type : " + method.getReturnType().getName() + " method name : " + method.getName() + " parameters : null)");

}

}

System.out.println("-------------------method dump-------------------------");

System.out.println("-------------------------------------------------------");

System.out.println("-------------------fields dump-------------------------");

Field[] fields = classObj.getDeclaredFields();

for(Field field : fields)

{

//能够访问该字段

field.setAccessible(true);

System.out.println("field info (modifier : " + Modifier.toString(field.getModifiers()) + " type : " + field.getType().getName() + " " + " name : " + field.getName() + " defaultValue : " + field.get(obj).toString() + ")");

}

}

}

package Demo;

/**

* Demo 测试类

*/

public class Demo1

{

public String demo1 = "demo1_val";

protected String demo2 = "demo2_val";

private String demo3 = "demo3_val";

public static String demo4 = "demo4_val";

public String getName()

{

return "my name is 勇哥";

}

public int getAge()

{

return 22;

}

public String test1(String str1,String str2)

{

StringBuffer buffer = new StringBuffer(str1);

buffer.append(str2);

return buffer.toString();

}

public String test1()

{

return "123";

}

}

希望本文所述对大家java程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值