详解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. jquery的ajax(err)

    load()方法 load()方法是jquery中最为简单和常用的ajax方法. 直接使用ajax技术的流程 1.创建xmlhttprequest对象 2.调用open函数("提交方式&qu ...

  2. 图数据库Neo4j简介

    图数据库Neo4j简介 转自: 图形数据库Neo4J简介 - loveis715 - 博客园https://www.cnblogs.com/loveis715/p/5277051.html 最近我在用 ...

  3. 06 - Django应用第三步

    知识点 1) 编写urls 配合include()的URL查找过程 获取正则抓取的值并命名, 给url取名 2) 模板的编写 for循环的遍历 用点的方式执行函数, 不带括号 3) 视图函数的编写 H ...

  4. FFMPEG实现的转码程序

    本例子是由FFEMPG的doc/example例子transcode.c修改而来,可以根据需求任意转换音视频的编码. 原来的例子的作用更类似于remux,并没有实现转码的功能,只是实现了格式转换,比如 ...

  5. 图的Tarjan算法

    “Tarjan有三种算法 你们知道吗”——Tar乙己 void tarjan(int x) { low[x]=dfn[x]=++ind; q[++top]=x;mark[x]=; for(int i= ...

  6. LG3533 [POI2012]RAN-Rendezvous

    2791: [Poi2012]Rendezvous Time Limit: 25 Sec  Memory Limit: 128 MBSubmit: 259  Solved: 160[Submit][S ...

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

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

  8. ACM学习历程—FZU2148 Moon Game(计算几何)

    Moon Game Description Fat brother and Maze are playing a kind of special (hentai) game in the clearl ...

  9. Azure 用户自定义路由 (User Defined Route)

    在公有云环境中,用户创建了一个Vnet,添加了若干个网段后,这几个网段是全联通的状态. 如果希望在Vnet中添加一些功能性的设备,比如防火墙.IPS.负载均衡设备等,就需要进行用户自定义路由的配置. ...

  10. 转载:PLSQL Developer使用技巧整理

    Shortcut(快捷方式): Edit/Undo     Ctrl+Z Edit/Redo     Shift+Ctrl+Z Edit/PL/SQL Beautifier  Ctrl+W   (自定 ...