本文接上文“老生常谈反射之class类的使用(必看篇)”,以编写一个用来获取类的信息(成员函数、成员变量、构造函数)的工具类来讲解"反射之获取类的信息"

1、获取成员函数信息

/**

* 获取成员函数信息

* @param obj

*/

public static void printclassmethodmessage(object obj){

//获取类的信息 获取类的类类型

class c = obj.getclass();

//获取类的名称

system.out.println("类的名称是:" + c.getname());

/**

* methods类,方法对象

* 一个成员方法就是一个method对象

* getmethods()方法是获取所有public的函数,包括父类继承而来

* getdeclaredmethods()获取的是所有该类自己声明的方法,不问访问权限

*/

// method [] ms = c.getmethods();

method [] ms = c.getdeclaredmethods();

for (method m : ms) {

//得到方法返回值的类类型

class returntype = m.getreturntype();

system.out.print(returntype.getname() + " ");

//得到方法名称

system.out.print(m.getname() + "(");

//获取参数类型(得到的是参数列表的类型的类类型)

class[] paramtypes = m.getparametertypes();

for (class paramtype : paramtypes) {

system.out.print(paramtype.getname()+",");

}

system.out.println(")");

}

}

2、获取成员变量信息

/**

* 获取成员变量信息

* @param obj

*/

public static void printclassfieldmessage(object obj) {

class c = obj.getclass();

/**

* 成员变量也是对象

* field类封装了关于成员变量的操作

* getfields()获取的是所有的public的成员变量信息

* getdeclaredfields()获取的是该类自己声明的成员变量信息

*/

// field [] fs = c.getfields();

field[] fs = c.getdeclaredfields();

for (field f : fs) {

//得到成员变量的类型的类类型

class fieldtype = f.gettype();

string typename = fieldtype.getname();

//得到成员变量的名称

string fieldname = f.getname();

system.out.println(typename+" "+fieldname);

}

}

3、获取构造函数信息

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 paramtype : paramtypes) {

system.out.print(paramtype.getname()+",");

}

system.out.println(")");

}

}

4、工具类代码

package com.format.util;

import java.lang.reflect.constructor;

import java.lang.reflect.field;

import java.lang.reflect.method;

/**

* 打印类的信息,成员函数、成员变量

* created by format on 2017/6/3.

*/

public class classutil {

/**

* 获取成员函数信息

* @param obj

*/

public static void printclassmethodmessage(object obj){

//获取类的信息 获取类的类类型

class c = obj.getclass();

//获取类的名称

system.out.println("类的名称是:" + c.getname());

/**

* methods类,方法对象

* 一个成员方法就是一个method对象

* getmethods()方法是获取所有public的函数,包括父类继承而来

* getdeclaredmethods()获取的是所有该类自己声明的方法,不问访问权限

*/

// method [] ms = c.getmethods();

method [] ms = c.getdeclaredmethods();

for (method m : ms) {

//得到方法返回值的类类型

class returntype = m.getreturntype();

system.out.print(returntype.getname() + " ");

//得到方法名称

system.out.print(m.getname() + "(");

//获取参数类型(得到的是参数列表的类型的类类型)

class[] paramtypes = m.getparametertypes();

for (class paramtype : paramtypes) {

system.out.print(paramtype.getname()+",");

}

system.out.println(")");

}

}

/**

* 获取成员变量信息

* @param obj

*/

public static void printclassfieldmessage(object obj) {

class c = obj.getclass();

/**

* 成员变量也是对象

* field类封装了关于成员变量的操作

* getfields()获取的是所有的public的成员变量信息

* getdeclaredfields()获取的是该类自己声明的成员变量信息

*/

// field [] fs = c.getfields();

field[] fs = c.getdeclaredfields();

for (field f : fs) {

//得到成员变量的类型的类类型

class fieldtype = f.gettype();

string typename = fieldtype.getname();

//得到成员变量的名称

string fieldname = f.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 paramtype : paramtypes) {

system.out.print(paramtype.getname()+",");

}

system.out.println(")");

}

}

}

以上这篇java反射之获取类的信息方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持萬仟网。

希望与广大网友互动??

点此进行留言吧!

java反射 获取方法_java反射之获取类的信息方法(推荐)相关推荐

  1. java 对象重写equals方法_Java如何重写object类的equals方法详解

    1.Object类的equals()方法: 比较两个对象是否是同一个对象,equals() 方法比较两个对象,是判断两个对象引用指向的是同一个对象,即比较 2 个对象的内存地址是否相等.是则返回tru ...

  2. java反射方法_java反射之方法反射的基本操作方法

    本文接上文"java反射之获取类的信息方法(推荐)",利用反射(invoke)来获取一个类中的方法来执行. 1.定义一个类,包含三个名称相同,参数不同的方法 class A{ pu ...

  3. java 获取方法_Java 反射理解(三)-- Java获取方法信息

    Java 反射理解(三)-- Java获取方法信息 基本的数据类型.void关键字,都存在类类型. 举例如下: public class ClassDemo2 { public static void ...

  4. java反射 获取属性_Java反射学习-3 - 反射获取属性,方法,构造器

    1 packagecn.tx.reflect;2 3 importjava.lang.reflect.Constructor;4 importjava.lang.reflect.Field;5 imp ...

  5. java根据field名获取变量_Java反射有多强?这5大神奇功能,你需要了解!

    点击上方"蓝字",关注了解更多 什么是反射? 在Java中,对于任意一个运行中的对象,可以调用该对象的任意属性和方法:已知一个类,可以获取这个类的所有属性和方法,这就是反射机制. ...

  6. java根据属性获取对象_java反射工具类--通过指定属性名,获取/设置对象属性值

    java对象通过点运算符操作对象属性的方式没法使用for,while等循环,此工具主要解决这一问题. 例如:有一对象包含属性有一定规律 obj1: { name1: "张三", a ...

  7. java測試動態方法_java反射学习

    反射的核心Class类 Class类是一个特殊的类,不能手动创建,只能由jvm来创建. jvm在类加载时会为每个类生成一个与之对应的Class对象在Java堆中(且每个类只会有一个对应的Class对象 ...

  8. java反射机制调用带参数的方法_Java反射机制:跟着代码学反射

    1. 前言 在OOP的世界里,万物皆对象.也就是说,我们可以将任何东西抽象成一个对象. 比如人,可以抽象成一个Person类,通过new Person()来实例化一个对象:再比如鸭子,可以抽象成一个D ...

  9. java see 方法_Java 反射常用方法

    类名用途 Class类 代表类的实体,在运行的Java应用程序中表示类和接口 Field类 代表类的成员变量(成员变量也称为类的属性) Method类 代表类的方法 Constructor类 代表类的 ...

最新文章

  1. CTFshow php特性 web107
  2. 问题 B: PK吹泡泡(Kruscal)
  3. C++类模板实例化条件
  4. Java中如何去掉字符串中的非法字符(预防SQL注入)
  5. CYYMysql 源码解读 2
  6. php将文件转换为utf-8,PHP-将邮件正文转换为UTF-8
  7. Host '***' is blocked because of many connection errors...
  8. mysql在官网下载完解压后安装
  9. LINUX查询版本情况
  10. armeabi与armeabi-v7a的区别,绝对干货!
  11. [转] 英语不规则动词表
  12. 合并excel方法汇总
  13. 用计算机如何算针入度指数,沥青针入度指数怎么计算?需要计算公式,最好说的详细一点!...
  14. WARNING - this build will not support IPVS with IPv6. 警告解决
  15. vue刘海屏兼容组件
  16. 基于Pytorch的MNIST手写数字识别实现(含代码+讲解)
  17. 分享一下杭州医院的看病流程(我去的杭州市第三人民医院)
  18. mysql数据库试用期过了_mysql试用期过了
  19. 微信小程序,分享如何封装一个全局支持暂停,拖动等各类操作的音视频等多媒体管理器
  20. [转载]创业者的N种死法

热门文章

  1. javascript --- 使用对象关联简化整体设计
  2. Spring Cloud Zuul网关(快速搭建)
  3. 月蚀动漫获快看漫画600万元A轮战略投资,走国漫精品化路线
  4. HBase + SpringBoot分布式文件存储实战(一)-简介
  5. Ceph分布式存储系统-性能测试与优化
  6. Tomcat 配置和spring-framework MVC配置简介
  7. leetcode21
  8. ES6之const命令
  9. IOS中NSUserDefaults的用法
  10. 在高科技产业当中,有时候你的产品出现了问题,你反过来可以把这个问题称为你的特点...