java.lang.reflect包中有三个类Field、Method、Constructor用于描述类的域、方法、构造器。三个类中都有一个方法为getName(),返回项目的名称,其他常用方法会在代码中有描述;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Date;
import java.util.Scanner;
public class mode4 {
public static void main(String[] args) {
String name;
//输入class.name
if(args.length>0){
name = args[0];
}else
{
Scanner scanner = new Scanner(System.in);
name = scanner.nextLine();
}
try {
Class c1 = Class.forName(name);
//得到父类
Class supercl = c1.getSuperclass();
//得到该类的修饰符(getMmodifiers()是返回整数值,代表各种修饰符的开关,也可以用
//isPublic等方法判断)
String modifiers = Modifier.toString(c1.getModifiers());
if(modifiers.length()>0){
System.out.print(modifiers+" ");
}
System.out.print("class "+name+" ");
//打印继承的父类
if(supercl!=null&&supercl!=Object.class){
System.out.print("extends "+supercl.getName());
}
//主体
System.out.print("\n{\n");
//打印构造器
printConstructors(c1);
System.out.println();
//打印域
printField(c1);
System.out.println();
//打印方法
printMethod(c1);
System.out.print("\n}");
}
catch (ClassNotFoundException e){
e.printStackTrace();
}
}
public static void printConstructors(Class c1){
//getConstructors()返回一个Constructors对象的数组,包含该类中的所以构造器
Constructor[] constructors = c1.getConstructors();
for (int i = 0; i < constructors.length; i++) {
System.out.print(" ");
String name = c1.getName();
//打印该构造器的修饰符
String modifiers = Modifier.toString(c1.getModifiers());
if(modifiers.length()>0){
System.out.print(modifiers+" ");
}
//打印该构造器的参数,这里为了方便写了一个方法专门打印参数
System.out.print(c1.getName()+"(");
reClass(constructors[i].getParameterTypes(), constructors, i);
}
}
public static void printField(Class c1){
Field[] fields = c1.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
System.out.print("\t");
String modifiers = Modifier.toString(c1.getModifiers());
if(modifiers.length()>0){
System.out.print(modifiers+" ");
}
String name = fields[i].getName();
System.out.print(" ");
if(fields[i].getType()!=null) {
//打印该域的Type
System.out.print(fields[i].getType() + " " + name+"\n");
}else
{
System.out.print(name+"\n");
}
}
}
public static void printMethod(Class c1){
Method[] methods = c1.getDeclaredMethods();
for (int i = 0; i < methods.length; i++) {
System.out.print("\t");
String name = methods[i].getName();
String modifiers = Modifier.toString(methods[i].getModifiers());
if(modifiers.length()>0){
System.out.print(modifiers+" ");
}
Class retype = methods[i].getReturnType();
if(retype!=null){
System.out.print(retype.getName()+" "+name);
}
System.out.print("(");
reClass(methods[i].getParameterTypes(), methods, i);
}
}
private static void reClass(Class[] parameterTypes, Constructor[] constructors, int i) {
PrintArray(parameterTypes);
}
private static void reClass(Class[] parameterTypes,Method[] methods, int i) {
PrintArray(parameterTypes);
}
private static void PrintArray(Class[] parameterTypes) {
Class[] classes = parameterTypes;
for (int i1 = 0; i1 < classes.length; i1++) {
if(i1>0) System.out.print(", ");
System.out.print(classes[i1].getName());
}
System.out.print(")\n");
}
}