- import java.lang.reflect.Constructor;
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- import java.lang.reflect.Modifier;
- public class CreateClass {
- //依据特定规则截取字符串的函数
- public static String getLastPartStr(String str){
- return str.substring(str.lastIndexOf(".") + 1,str.length());
- }
- public static void main(String[] args) {
- Load load = new Load();
- String fileName = "F:\\Boy.class";
- //通过类加载器获取类对象
- Class<? extends Object> classObject = load.loadClass("", fileName);
- //类的访问修饰符
- String modifier = Modifier.toString(classObject.getModifiers());
- //类名(完整路径)
- String className = classObject.getName();
- //截取类名
- className = getLastPartStr(className);
- // 类名
- System.out.println(modifier + " class " + className + "{");
- /*
- * ==========================================
- * 获取成员属性
- * ==========================================
- */
- Field[] fields = classObject.getDeclaredFields();
- System.out.println("\t//成员属性");
- for (int i = 0; i < fields.length; i++) {
- Field f = fields[i];
- // 成员属性的类型
- String fieldType = f.getType().getName();
- // 截取
- fieldType = getLastPartStr(fieldType);
- // 显示访问修饰符+类型+名称
- System.out.print("\t" + Modifier.toString(f.getModifiers()) + " "
- + fieldType + " " + f.getName() + ";");
- System.out.println();
- }
- System.out.println();
- /*
- * ==========================================
- * 获取构造函数
- * ==========================================
- */
- Constructor[] ctr = classObject.getConstructors();
- // 循环输出构造函数的信息
- System.out.println("\t//构造函数");
- for (int i = 0; i < ctr.length; i++) {
- Constructor con = ctr[i];
- String conName=con.getName();
- conName=getLastPartStr(conName);
- System.out.print("\t" + Modifier.toString(con.getModifiers()) + " "
- + conName+"(");
- // 获取方法的参数列表
- Class<?>[] fieldCLASS = con.getParameterTypes();
- con.getParameterAnnotations();
- // 如果该方法没有参数,就直接输出
- if (fieldCLASS.length == 0) {
- System.out.print("){\n\n\t}");
- } else {
- // 如果该方法有参数,则循环显示参数信息
- for (int j = 0; j < fieldCLASS.length; j++) {
- // 参数的数据类型
- String paraType = fieldCLASS[j].getName();
- // 截取参数类型
- paraType = getLastPartStr(paraType);
- System.out.print(paraType);
- }
- // 显示方法体部分
- System.out.print("){\n\n\t}");
- }
- System.out.println();
- /*
- * ==========================================
- * 获取类对象的所有方法
- * ==========================================
- */
- System.out.println("\t//方法");
- Method[] method = classObject.getDeclaredMethods();
- // 循环列出所有的方法以及方法所具有的参数信息
- for (int k = 0; k < method.length; k++) {
- Method m = method[k];
- // 返回值类型
- Class<? extends Object> returnTYPE = m.getReturnType();
- // 返回值类型的名称
- String returnType = returnTYPE.getName();
- //方法名称
- String methodName=m.getName();
- // 截取
- returnType = getLastPartStr(returnType);
- // 输出方法信息(修饰符 + 返回值类型 + 方法名称)
- System.out.print("\t" + Modifier.toString(m.getModifiers())
- + " " + returnType + " " +methodName + "(");
- // 获取方法的参数列表
- Class<?>[] methodCLASS = m.getParameterTypes();
- m.getParameterAnnotations();
- // 如果该方法没有参数,就直接输出
- if (methodCLASS.length == 0) {
- System.out.print("){\n\n\t}");
- } else {
- // 如果该方法有参数,则循环显示参数信息
- for (int j = 0; j < methodCLASS.length; j++) {
- // 参数的数据类型
- String paraType = methodCLASS[j].getName();
- // 截取参数类型
- paraType = getLastPartStr(paraType);
- System.out.print(paraType);
- //根据方法的名称设置参数名称
- String paraName=methodName.substring(3).toLowerCase();
- // 显示方法体部分
- System.out.print(" "+paraName);
- }
- System.out.print("){\n\n\t}");
- }
- System.out.println();
- }
- // 类的结束大括号
- System.out.println("}");
- }
- }
- }