package com.cxf.reflectionDemo;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Scanner;
/**
* 用于打印一个类的全部信息
* @author chen
* @version 1.1 2019.9.27
*/
public class ReflectionTest {
public static void main(String[] args) {
//键入全限定类名
String name;
Scanner in = new Scanner(System.in);
System.out.println("Enter class name:(eg : java.util.Date)");
name = in.next();
try {
Class c1 = Class.forName(name);
Class superc1 = c1.getSuperclass();
String modifiers = Modifier.toString(c1.getModifiers());
if (modifiers.length() > 0) System.out.print(modifiers + " ");
System.out.print("class" + " " + name);
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.println("}");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.exit(0);
}
/**
* 打印一个类的全部构造方法
* @param c1 一个类
*/
private static void printConstructors(Class c1) {
Constructor[] constructors = c1.getDeclaredConstructors();
for (Constructor c : constructors) {
String name = c.getName();
System.out.print(" ");
String modifiers = Modifier.toString(c.getModifiers());
if (modifiers.length() > 0) System.out.print(modifiers + " ");//修饰名
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.print(")");
System.out.println();
}
}
/**
* 打印一个类的全部方法
* @param c1 一个类
*/
private static void printMethods(Class c1) {
Method[] declaredMethods = c1.getDeclaredMethods();
for (Method m : declaredMethods) {
Class returnType = m.getReturnType();
String name = m.getName();
System.out.print(" ");
String modifiers = Modifier.toString(m.getModifiers());
if (modifiers.length() > 0) System.out.print(modifiers + " ");//修饰名
System.out.print(returnType.getName() + " " + name + "(");//返回类型,方法名
//参数类型
Class[] parameterTypes = m.getParameterTypes();
for (int j = 0; j < parameterTypes.length; j++) {
if (j > 0) System.out.print(",");
System.out.print(parameterTypes[j].getName());
}
System.out.print(")");
System.out.println();
}
}
/**
* 打印一个类的所有属性
* @param c1 一个类
*/
private static void printFields(Class c1) {
Field[] fields = c1.getFields();
for (Field f : fields) {
Class type = f.getType();
String name = f.getName();
System.out.print(" ");
String modidfier = Modifier.toString(f.getModifiers());
if (modidfier.length() > 0) System.out.print(modidfier + " ");
System.out.print(type.getName() + " " + name + ";");
System.out.println();
}
}
}
反射简单应用实例---分析类的能力
最新推荐文章于 2021-05-17 00:19:01 发布