java 反射getClass .class 的使用

javv 反射机制

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

/**
 * 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<parameters.length;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";
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值