[Java反射基础二]获取类的信息
本文接上文“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反射机制 之 获取类的字节码文件 Class.forName("全路径名") 、getClass()、class
另一个篇:获取 类 的 方法 和 属性(包括构造函数) 先贴上Java反射机制的概念: AVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它 ...
- JAVA反射机制教程-获取类对象
1. 什么是类对象 类对象,就是用于描述这种类,都有什么属性,什么方法的 2. 获取类对象 获取类对象有3种方式(1). Class.forName(2). Hero.class(3). new He ...
- 浅谈Java反射机制 之 获取类的 方法 和 属性(包括构造函数)
上一篇 获取 类 的字节码文件 我们讲到了获取类的字节码文件的三种方法 第三种方法通过getClass("全路径名")获取字节码文件最符合要求 1.获取构造方法 先贴上我们要获取的 ...
- Java反射机制 之 获取类的 方法 和 属性(包括构造函数)(Day_06)
把自己立成帆,才能招来凤. 运行环境 JDK8 + IntelliJ IDEA 2018.3 本文中使用的jar包链接 https://files.cnblogs.com/files/papercy ...
- Java反射机制二 获取方法的返回值或参数的泛型信息
在使用反射机制时,我们经常需要知道方法的参数和返回值类型,很简单 ,下面上示例,示例中的两个方法非常相似 package deadLockThread; import java.lang.refle ...
- [Java反射基础一]Class类的使用
任何一个类都是Class类的实例对象,这个实例对象有三种表示方式 第一种表示方式(任何一个类都有一个隐含的静态成员变量class): Class c1 = Foo.class; 第二种表示方式(已知该 ...
- 浅谈Java反射机制 之 使用类的 属性、方法和构造函数
前面两篇我们总结了Java反射机制如何获取类的字节码,如何获取构造函数,属性和方法, 这篇我们将进一步验证如何使用我们获取到的属性.方法以及构造函数 1.使用 反射 获取到的 属性 import ja ...
- 反射01 Class类的使用、动态加载类、类类型说明、获取类的信息
0 Java反射机制 反射(Reflection)是 Java 的高级特性之一,是框架实现的基础. 0.1 定义 Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对 ...
- Java反射机制能够获取的信息,与应用
一.什么是Java反射机制? [1]反射机制是在运行状态中,对于任何一个类,都能够知道这个类的所有属性和方法: [2]对于任意一个对象,都能够调用它的任意一个属性和方法: 像这种动态获取类的信息以及动 ...
随机推荐
- Python 验证码识别(别干坏事哦...)
关于python验证码识别库,网上主要介绍的为pytesser及pytesseract,其实pytesser的安装有一点点麻烦,所以这里我不考虑,直接使用后一种库. python验证码识别库安装 要安 ...
- ArchLinux 下 OpenSSH 高级运用
00x0.相关介绍 OpenSSH(OpenBSD Secure Shell)使用 SSH 通过计算机网络加密通信的实现. 它是替换由 SSH Communications Security 所提供的 ...
- 制作基于centos可以ssh连接的容器以及tomcat容器
可以ssh连接的centos容器 参考:http://blog.csdn.net/mexel310/article/details/51705777 一. pull好镜像后,运行容器 1. docke ...
- PHP开发微信公众号(一)二维码的获取
要开发微信公众号,首先进行需要注册一个,然后认证.这就不用多说了. 当然如果没有,也可以去申请一个测试号来使用,地址:https://mp.weixin.qq.com/debug/cgi-bin/sa ...
- day0202 (%s)
#格式化输出# % s d# name = input('请输入姓名')# age = input('请输入年龄')# height = input('请输入身高')# msg = "我叫% ...
- 剑指offer——面试题16:数值的整数次方
// 面试题16:数值的整数次方 // 题目:实现函数double Power(double base, int exponent),求base的exponent // 次方.不得使用库函数,同时不需 ...
- idea 修改jar包源码的编码
项目中有些老的jar不是utf8打包的,中文显示乱码 打开的文件上直接右键, 修改只读jar的源码 自己写的文件可以在右下角修改编码,只读文件就要用上面的方法了
- SpringBoot + Spring MVC国际化使用示例
项目中需要显示中英文两种语言,所以需要对显示的内容进行国际化,如下是一个示例程序. 程序文件结构,如下图,后面详细列出各文件的代码. 1. 编写maven的pom.xml文件,如下: <proj ...
- Java_方法的基本语法格式
[修饰符] 返回值类型 方法名称([参数列表]){ 方法体 } [ ]中的内容是可有可无的 暂时将方法的修饰符编写为 public static 返回值类型有两种情况 : 第一种:无返回值类型,也就是 ...
- 2019.03.29 读书笔记 关于override与new
差异:override:覆盖父类分方法,new 隐藏父类方法. 共同:都不能改变父类自身方法. public class Test { public string Name { get; set; } ...