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

 更新时间:2019年11月20日 09:46:26   作者:倾听岁月  
这篇文章主要介绍了java 反射getClass .class 的使用方法,结合实例形式分析了java类反射机制的相关操作技巧,需要的朋友可以参考下

本文实例讲述了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<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";
  }
}

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

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

相关文章

  • Spring注解@RestControllerAdvice原理解析

    Spring注解@RestControllerAdvice原理解析

    这篇文章主要介绍了Spring注解@RestControllerAdvice原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Spring声明式事务@Transactional注解实现元数据驱动的事务管理

    Spring声明式事务@Transactional注解实现元数据驱动的事务管理

    这篇文章主要为大家介绍了Spring声明式事务@Transactional注解实现元数据驱动的事务管理示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Java中字符串与日期转换常见方法总结

    Java中字符串与日期转换常见方法总结

    这篇文章主要给大家介绍了关于Java中字符串与日期转换常见方法的相关资料,在Java编程中经常需要将字符串表示的日期转换为日期对象进行处理,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • 详解SpringBoot Starter作用及原理

    详解SpringBoot Starter作用及原理

    大家都知道基于 SpringBoot 开发项目可以简化 Spring 应用的搭建以及开发过程,提高程序员开发效率,这是由于其“约定大约配置”的策略及其自动装配的特点,Starter 就是自动装配的具体实现,本文详细介绍了SpringBoot Starter作用及原理,欢迎大家来阅读学习
    2023-04-04
  • 基于logback.xml不生效问题的解决

    基于logback.xml不生效问题的解决

    这篇文章主要介绍了基于logback.xml不生效问题的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Java反射机制,反射相关API,反射API使用方式(反射获取实体类字段名和注解值)

    Java反射机制,反射相关API,反射API使用方式(反射获取实体类字段名和注解值)

    这篇文章主要介绍了Java反射机制,反射相关API,反射API使用方式(反射获取实体类字段名和注解值),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Spring boot多线程配置方法

    Spring boot多线程配置方法

    这篇文章主要为大家详细介绍了Spring boot多线程配置方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Java使用OpenFeign管理多个第三方服务调用

    Java使用OpenFeign管理多个第三方服务调用

    最近开发了一个统一调度类的项目,需要依赖多个第三方服务,这些服务都提供了HTTP接口供我调用。感兴趣的可以了解一下
    2021-06-06
  • Java编程实现遍历两个MAC地址之间所有MAC的方法

    Java编程实现遍历两个MAC地址之间所有MAC的方法

    这篇文章主要介绍了Java编程实现遍历两个MAC地址之间所有MAC的方法,涉及Java针对MAC的遍历获取与字符串转换相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • Hibernate核心类和接口的详细介绍

    Hibernate核心类和接口的详细介绍

    今天小编就为大家分享一篇关于Hibernate核心类和接口的详细介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03

最新评论