详解Object.getClass()方法,这个方法的返回值是Class类型,Class c = obj.getClass(); 通过对象c,我们可以获取该对象的所有成员方法,每个成员方法都是一个Method对象;我们也可以获取该对象的所有成员变量,每个成员变量都是一个Field对象;同样的,我们也可以获取该对象的构造函数,构造函数则是一个Constructor对象,具体见下面的例子

 package classTest;

 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;

 /**
  * 打印类的信息,包括类的构造函数,成员函数,成员变量
  * @author Wang
  *
  */
 public class ClassUtil {

     /**
      * 获取对象的成员方法的信息
      *
      * @param obj
      */
     public static void printClassMethodMessage(Object obj) {
         // 要获取类的信息 首先要获取类的类类型,传递的是哪个子类的对象 c就是该子类的类类型
         Class c = obj.getClass();
         // 获取类的名称
         System.out.println("类的名称是:" + c.getName());
         /*
          * Method类,方法对象 一个成员方法就是一个Method对象
          * getMethods()方法获取的是所有的public的函数,包括父类继承而来的
          * getDeclaredMethods()获取的是所有该类自己声明的方法,不问访问权限
          */
         // c.getDeclaredMethods()
         Method[] ms = c.getMethods();
         for (int i = 0; i < ms.length; i++) {
             // 得到方法的返回值类型的类类型
             Class returnType = ms[i].getReturnType();
             System.out.print(returnType.getName() + " ");
             // 得到方法的名称
             System.out.print(ms[i].getName() + "(");
             // 获取参数类型--->得到的是参数列表的类型的类类型
             Class[] paramTypes = ms[i].getParameterTypes();
             for (Class class1 : paramTypes) {
                 System.out.print(class1.getName() + ",");
             }
             System.out.println(")");
         }
     }

     /**
      * 获取对象的成员变量的信息
      *
      * @param obj
      */
     public static void printFieldMessage(Object obj) {
         Class c = obj.getClass();
         /*
          * 成员变量也是对象 java.lang.reflect.Field Field类封装了关于成员变量的操作
          * getFields()方法获取的是所有的public的成员变量的信息
          * getDeclaredFields获取的是该类自己声明的成员变量的信息
          */
         // Field[] fs = c.getFields();
         Field[] fs = c.getDeclaredFields();
         for (Field field : fs) {
             // 得到成员变量的类型的类类型
             Class fieldType = field.getType();
             String typeName = fieldType.getName();
             // 得到成员变量的名称
             String fieldName = field.getName();
             System.out.println(typeName + " " + fieldName);
         }
     }

     /**
      * 打印对象的构造函数的信息
      *
      * @param obj
      */
     public static void printConMessage(Object obj) {
         Class c = obj.getClass();
         /*
          * 构造函数也是对象 java.lang. Constructor中封装了构造函数的信息
          * getConstructors获取所有的public的构造函数 getDeclaredConstructors得到所有的构造函数
          */
         // Constructor[] cs = c.getConstructors();
         Constructor[] cs = c.getDeclaredConstructors();
         for (Constructor constructor : cs) {
             System.out.print(constructor.getName() + "(");
             // 获取构造函数的参数列表--->得到的是参数列表的类类型
             Class[] paramTypes = constructor.getParameterTypes();
             for (Class class1 : paramTypes) {
                 System.out.print(class1.getName() + ",");
             }
             System.out.println(")");
         }
     }
 }

详解Java中的Object.getClass()方法的更多相关文章

  1. 详解Java中的clone方法

    详解Java中的clone方法 参考:http://blog.csdn.net/zhangjg_blog/article/details/18369201/ 所谓的复制对象,首先要分配一个和源对象同样 ...

  2. 详解Webwork中Action 调用的方法

    详解Webwork中Action 调用的方法 从三方面介绍webwork action调用相关知识: 1.Webwork 获取和包装 web 参数 2.这部分框架类关系 3.DefaultAction ...

  3. 详解Java中的clone方法:原型模式

    转:http://developer.51cto.com/art/201506/478985.htm clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象.所谓的 ...

  4. 详解Java中的clone方法 -- 原型模式

    转自: http://blog.csdn.net/zhangjg_blog/article/details/18369201 Java中对象的创建   clone顾名思义就是复制, 在Java语言中, ...

  5. 实例详解Java中如何对方法进行调用

    原文源自http://www.jb51.net/article/73827.htm 方法调用Java支持两种调用方法的方式,根据方法是否返回值来选择. 当程序调用一个方法时,程序的控制权交给了被调用的 ...

  6. 【Java学习笔记之三十三】详解Java中try,catch,finally的用法及分析

    这一篇我们将会介绍java中try,catch,finally的用法 以下先给出try,catch用法: try { //需要被检测的异常代码 } catch(Exception e) { //异常处 ...

  7. 详解Java中的字符串

    字符串常量池详解 在深入学习字符串类之前, 我们先搞懂JVM是怎样处理新生字符串的. 当你知道字符串的初始化细节后, 再去写String s = "hello"或String s ...

  8. 详解 Java 中的三种代理模式

    代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 这里使用 ...

  9. java中String是对象还是类?详解java中的String

    有很多人搞不懂对象和类的定义.比如说java中String到底是对象还是类呢? 有人说String 既可以说是类,也可以说是对象. 其实他这么说也没问题, 类和对象其实都是一个抽象的概念. 我们可以把 ...

随机推荐

  1. java中properties

    一.Java Properties类 Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置 ...

  2. UniDAC 的 RecordCount 属性注意事项

    一直以来都是用UniDAC作为数据库查询组件,而一般的写法都是这样: UniQuery_sqlite.close; UniQuery_sqlite.SQL.Clear; UniQuery_sqlite ...

  3. codeforces 655D D. Robot Rapping Results Report(拓扑排序+拓扑序记录)

    题目链接: D. Robot Rapping Results Report time limit per test 2 seconds memory limit per test 256 megaby ...

  4. objdump 命令的用法

    gcc命令之 objdump ---------------objdump是用查看目标文件或者可执行的目标文件的构成的GCC工具---------- 以下3条命令足够那些喜欢探索目标文件与源代码之间的 ...

  5. Oracle中spool命令实现的两种方法比较

    ---恢复内容开始--- 要输出符合要求格式的数据文件只需在select时用字符连接来规范格式.比如有如下表 SQL>; select id,username,password from myu ...

  6. poj 1845 Sumdiv(约数和,乘法逆元)

    题目: 求AB的正约数之和. 输入: A,B(0<=A,B<=5*107) 输出: 一个整数,AB的正约数之和 mod 9901. 思路: 根据正整数唯一分解定理,若一个正整数表示为:A= ...

  7. tarjan求割点

    首先给大家一个网址讲的比较细:http://www.cnblogs.com/en-heng/p/4002658.html 如果还有不懂的话,可以回来再看看我的文章; 概念明确: 树边:(在[2]中称为 ...

  8. iOS奇怪的问题,键盘偏移异常

    现象描述: 点击UITextView,键盘会弹出.然后点击添加图片,弹出了ActionSheet,键盘自动收缩.接着关闭ActionSheet,发现键盘又弹出了,接着点击Done,想要隐藏键盘,却发现 ...

  9. Boilerplate

    HTML5 Boilerplate 是一个由 Paul Irish(Google Chrome 开发人员.jQuery 项目成员.Modernizr 作者.yayQuery 播客主持人)主导的“前端开 ...

  10. POJ2420:A Star not A Tree?

    我对模拟退火的理解:https://www.cnblogs.com/AKMer/p/9580982.html 我对爬山的理解:https://www.cnblogs.com/AKMer/p/95552 ...