详解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- 数据库连接池原理

    第一次Java程序要在MySQL中执行一条语句,那么就必须建立一个Connection对象,代表了与MySQL数据库的连接通过直接发送你要执行的SQL语句之后,就会调用Connection.close ...

  2. 关于输出用%lf和%f的问题

    关于输入,float用%f,double用%lf 而输出时,无论是float还是double,都用%f 原文请见:http://poj.org/showmessage?message_id=12692 ...

  3. [深入学习C#]C#实现多线程的方法:线程(Thread类)和线程池(ThreadPool)

    简介 使用线程的主要原因:应用程序中一些操作需要消耗一定的时间,比如对文件.数据库.网络的访问等等,而我们不希望用户一直等待到操作结束,而是在此同时可以进行一些其他的操作.  这就可以使用线程来实现. ...

  4. python-多线程趣味

    假设一个程序员,想听歌,但是又想敲代码,于是又: 我听完歌就去敲代码: #! /usr/bin/env python #coding=utf-8 import time def matter1(mus ...

  5. 10 Python 数据类型—集合

    在Python set是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset)两种.创建集合set.集合set添加.集合删除.交集.并集.差集的操作都是非常实用的方法 ...

  6. myod中遇到的问题

    一.准备工作 首先在编程之前遇到的第一个问题就是要了解需要编出一个怎样的代码,了解od -tx -tc的具体意思,并观察其输出结果. -tc代表着输出ASCII字符,而-tx则是代表着输出ASCII字 ...

  7. 20179203李鹏举 《Linux内核原理与分析》第一周学习笔记

    Linux基础入门 一.Linux的基础学习 1.1 Linux的重要基础操作 Linux不同于Windows的纯粹的图形化界面,虽然也有图形桌面的操作但是更多的操作还是通过命令行来进行,当然除了命令 ...

  8. CodeForces - 605C 凸包+直线与凸包判交

    题目大意: 要完成两种属性p,q的需求,给定n个双属性物品及其单位个物品中含有的属性,要求选择最少的物品来达成属性需求.(可以选择实数个物品) 题解: 实际上是一种属性混合问题 我们知道对于两种双属性 ...

  9. poj 1517 u Calculate e(精度控制+水题)

    一.Description A simple mathematical formula for e is e=Σ0<=i<=n1/i! where n is allowed to go t ...

  10. HDOJ1728(限制转弯的迷宫问题)

    用bfs进行深搜,求出每个可达点的最小转弯数 #include<cstdio> #include<cstring> #include<queue> using na ...