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

本文通过示例代码展示了如何使用Java反射机制获取类的结构信息,包括构造函数、方法和属性等,并详细解释了如何打印这些信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[b]使用Java反射机制得到类的结构信息[/b]
代码如下:

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 {
// 得到此类对应的Class
Class c1 = Class.forName(name);
// 得到此类的父类
Class superc1 = c1.getSuperclass();
System.out.print("class " + name);
// 如果超类不为空且不是Object
if (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 block
e.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");
}
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值