详解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. javascript 数组 去重

    javascript数组去重有如下 方法: 一) 利用 数组中的 indexOf判断  例如: Array.prototype.unique=function(){ var n=[]; for(var ...

  2. unit Base64Unit;

    unit Base64Unit; unit Base64Unit; //Download by http://www.codefans.net interface uses Classes, SysU ...

  3. 分享知识-快乐自己:Shiro 退出登陆清空缓存实现

    shiro是一个被广泛使用的安全层框架,通过xml配置方式与spring无缝对接,用户的登陆/退出/权限控制/Cookie等管理系统基础功能交给shiro来管理. 一般,在JavaWEB管理平台系统时 ...

  4. 【python】关于函数递归使用 return 后,收到数据为 None。

    在写一个辗转相除求最小公因数的程序的时候,突然发现自己不管怎么写(除了两数恰巧可以整除),return 返回的值恒为 none. 代码为此: def gcd(a,b): if a%b==0: retu ...

  5. 洛谷p3369 treap

    这是一个treap裸题,还可以用splay,替罪羊树,线段树等等写 treap是树和堆结合,可以方便的在O(log(n))期望时间内进行以下操作,因此treap又叫做名次树 插入x数 删除x数(若有多 ...

  6. 实现stack 加上·getMin功能 时间复杂度为O(n)

    package com.hzins.suanfa; import java.util.Stack; /** * 实现stack 加上·getMin功能 时间复杂度为O(n) * @author Adm ...

  7. 机器学习 Generative Learning Algorithm (A)

    引言 前面几讲,我们主要探讨了如何对 p(y|x;θ) (即y 相对于x的条件概率)进行建模的几种学习算法,比如,logistic regression 对 p(y|x;θ) 进行建模的假设函数为 h ...

  8. binlog配置和使用

    binlog启用和禁用在/etc/my.cnf文件中添加log-bin=mysql-bin来启用binlog,mysql-bin为日志文件名前缀.如果用户有super权限,可通过set sql_log ...

  9. codeblocks如何支持_tmain?可移植代码的编码推荐

    codeblocks默认源代码文件编码根据OS而定,编译时编码UTF-8. 在你不更改任何codeblocks配置时:                    在WINDOWS中:源代码——WINDOW ...

  10. 浏览器怎么禁用和开启Javascript

    转自;http://360.bgu.edu.cn/help/openJsHelp.html IE内核的浏览器禁用和启用Javascript功能都类似,首先我们需要打开IE8浏览器. 之后点击其右上角的 ...