本文接上文“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反射基础二]获取类的信息的更多相关文章

  1. 浅谈Java反射机制 之 获取类的字节码文件 Class.forName("全路径名") 、getClass()、class

    另一个篇:获取 类 的 方法 和 属性(包括构造函数) 先贴上Java反射机制的概念: AVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它 ...

  2. JAVA反射机制教程-获取类对象

    1. 什么是类对象 类对象,就是用于描述这种类,都有什么属性,什么方法的 2. 获取类对象 获取类对象有3种方式(1). Class.forName(2). Hero.class(3). new He ...

  3. 浅谈Java反射机制 之 获取类的 方法 和 属性(包括构造函数)

    上一篇 获取 类 的字节码文件 我们讲到了获取类的字节码文件的三种方法 第三种方法通过getClass("全路径名")获取字节码文件最符合要求 1.获取构造方法 先贴上我们要获取的 ...

  4. Java反射机制 之 获取类的 方法 和 属性(包括构造函数)(Day_06)

    把自己立成帆,才能招来凤. 运行环境 JDK8 + IntelliJ IDEA 2018.3  本文中使用的jar包链接 https://files.cnblogs.com/files/papercy ...

  5. Java反射机制二 获取方法的返回值或参数的泛型信息

    在使用反射机制时,我们经常需要知道方法的参数和返回值类型,很简单  ,下面上示例,示例中的两个方法非常相似 package deadLockThread; import java.lang.refle ...

  6. [Java反射基础一]Class类的使用

    任何一个类都是Class类的实例对象,这个实例对象有三种表示方式 第一种表示方式(任何一个类都有一个隐含的静态成员变量class): Class c1 = Foo.class; 第二种表示方式(已知该 ...

  7. 浅谈Java反射机制 之 使用类的 属性、方法和构造函数

    前面两篇我们总结了Java反射机制如何获取类的字节码,如何获取构造函数,属性和方法, 这篇我们将进一步验证如何使用我们获取到的属性.方法以及构造函数 1.使用 反射 获取到的 属性 import ja ...

  8. 反射01 Class类的使用、动态加载类、类类型说明、获取类的信息

    0 Java反射机制 反射(Reflection)是 Java 的高级特性之一,是框架实现的基础. 0.1 定义 Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对 ...

  9. Java反射机制能够获取的信息,与应用

    一.什么是Java反射机制? [1]反射机制是在运行状态中,对于任何一个类,都能够知道这个类的所有属性和方法: [2]对于任意一个对象,都能够调用它的任意一个属性和方法: 像这种动态获取类的信息以及动 ...

随机推荐

  1. python 导入模块与使用

    学习python之前一定要了解导入模块是怎么导入的,至少在看代码时不知道能很快的了解别人写的东西是哪里来. Python默认仅安装部分基础或核心模块,启动时也仅加载了基础模块,在需要是再显式的加载其他 ...

  2. CentOS 安装系统侦察工具

    Nessus setup: rpm -ivh http://downloads.nessus.org/nessus3dl.php\?file\=Nessus-6.10.2-es6.x86_64.rpm ...

  3. 案例2-tomcat自启动脚本

    适用于ubuntu,centos 涉及知识点 1. 函数 2. case语句 #!/bin/bash #chkconfig: #description:Tomcat service #pidfile: ...

  4. Intellij idea maven 引用无法搜索远程仓库的解决方案

    打开项目的POM文件,ALT+Insert键 出来添加引用的窗口 说明无法搜索到远程仓库,需要怎么设置呢? 在intellij idea 中配置好maven后 是这样的 如果加载失败,则需要自定义远程 ...

  5. SLIP—串行线路上传输数据报的非标准协议

    目录 SLIP-串行线路上传输数据报的非标准协议 简介 历史 实用性 协议 不足之处 SLIP驱动程序 做了这么多年的程序员后,总想资源回收一下,写一点点什么,却又发现无从写起. SLIP-串行线路上 ...

  6. python学习,day3:函数式编程

    调用函数来实现文件的修改(abc.txt),并增加上时间,调用的是time模块, 需要注意的是,每个函数一定要用‘’‘ ‘’’ 标注下函数说明 # coding=utf-8 # Author: RyA ...

  7. 标准结构篇:2)O型橡胶密封圈

    本章目的:设计出符合行业要求的O型橡胶密封圈,不必再为一而再,再而三的测试漏水而烦恼. 1.前言 O型橡胶密封圈,简称O型圈,是密封圈的一种,也是最有代表性的标准结构件.顾名思义,它的目的在于密封.密 ...

  8. dynamics crm 365 附件上传图片并且显示。

    参考了几篇博客做的: 新增websource文件(html): <!DOCTYPE html> <html> <head> <title>注释</ ...

  9. js 下不同浏览器,new Date转换结果时差

    项目中在android上使用XWalkView作为浏览器,发现在解析时间的时候解析结果和实际结果有时差. android联机调试的截图如下: PC本机调试截图如下: 从android联机调试的截图看, ...

  10. 后缀自动机 && 题目

    因为明天要讲解后缀自动机了,所以只能抱抱佛脚,临时做做题目.其实很久以前看过,但是不太懂,看的是clj的原文,不太懂.现在只能临时看看是怎么弄的,应付下. ---------------------- ...