六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 143|回复: 0

使用Java反射机制得到类的结构信息

[复制链接]

升级  70%

7

主题

7

主题

7

主题

童生

Rank: 1

积分
35
 楼主| 发表于 2013-2-5 02:13:48 | 显示全部楼层 |阅读模式
使用Java反射机制得到类的结构信息
代码如下:
package com.youdao.wm;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;/** * java反射机制测试:打印类的构造函数、方法、属性的信息 *  * @author jacky *  */public class ReflectionTest {public static void main(String[] args) {// 要打印的类名String name = "java.lang.Double";try {// 得到此类对应的ClassClass c1 = Class.forName(name);// 得到此类的父类Class superc1 = c1.getSuperclass();System.out.print("class " + name);// 如果超类不为空且不是Objectif (superc1 != null && superc1 != Object.class) {System.out.print("extends " + superc1.getName());}System.out.print("\n{\n");// 打印此类的构造函数信息printConstructors(c1);System.out.println();// 打印此类的方法信息printMethods(c1);System.out.println();// 打印此类的属性信息printFields(c1);System.out.print("\n}\n");} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/** * 打印Class对应类的构造函数信息 *  * @param c1 *            Class */public static void printConstructors(Class c1) {Constructor[] constructors = c1.getDeclaredConstructors();for (Constructor c : constructors) {String name = c.getName();System.out.print("   " + Modifier.toString(c.getModifiers()));System.out.print(" " + name + "(");Class[] paramTypes = c.getParameterTypes();for (int j = 0; j < paramTypes.length; j++) {if (j > 0)System.out.print(",");System.out.print(paramTypes[j].getName());}System.out.println(");");}}/** * 打印Class对应类的所有方法信息 *  * @param c1 *            Class */public static void printMethods(Class c1) {Method[] methods = c1.getDeclaredMethods();for (Method method : methods) {Class retType = method.getReturnType();String name = method.getName();System.out.print("   " + Modifier.toString(method.getModifiers()));System.out.print(" " + retType.getName() + " " + name + "(");Class[] paramTypes = method.getParameterTypes();for (int j = 0; j < paramTypes.length; j++) {if (j > 0)System.out.print(", ");System.out.print(paramTypes[j].getName());}System.out.println(");");}}/** * 打印Class对应类的属性信息 *  * @param c1 *            Class */public static void printFields(Class c1) {Field[] fields = c1.getDeclaredFields();for (Field f : fields) {Class classType = f.getType();System.out.print("   " + Modifier.toString(f.getModifiers()));System.out.print(" " + classType.getName() + " " + f.getName());System.out.println(";\n");}}}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表