JAVA中使用反射机制反编译类的方法和属性
使用到了StringBuilder类,用于拼接字符串对象
- 反编译Field
public class FieldTest02 {
public static void main(String[] args) throws Exception{
//创建拼接字符串对象
StringBuilder sb = new StringBuilder();
// Class c = Class.forName("reflection.field.User");
Class c = Class.forName("java.lang.String");
sb.append(Modifier.toString(c.getModifiers()) + " class " +
c.getSimpleName() + " {" + "\n");
//获取属性的修饰符
Field[] fields = c.getDeclaredFields();
for (Field field : fields){
sb.append("\t");
sb.append(Modifier.toString(field.getModifiers()) + " ");
sb.append(field.getType().getSimpleName() + " ");
sb.append(field.getName() + ";");
sb.append("\n");
}
sb.append("}");
System.out.println(sb);
}
}
- 反编译方法:
无法获取方法体
public class MethodTest03 {
public static void main(String[] args) throws Exception{
StringBuilder sb = new StringBuilder();
// Class c = Class.forName("reflection.method.UserService");
Class c = Class.forName("java.lang.String");
sb.append(Modifier.toString(c.getModifiers()));
sb.append(" class ");
sb.append(c.getSimpleName());
sb.append(" {");
sb.append("\n");
Method[] methods = c.getDeclaredMethods();
for (Method method : methods){
sb.append("\t");
sb.append(Modifier.toString(method.getModifiers()));
sb.append(" ");
sb.append(method.getReturnType().getSimpleName());
sb.append(" ");
sb.append(method.getName());
sb.append("(");
Class[] parameterTypes = method.getParameterTypes();
for (Class parameterType : parameterTypes){
sb.append(parameterType.getSimpleName());
sb.append(",");
}
sb.deleteCharAt(sb.length() - 1);
sb.append(") {}");
sb.append("\n");
}
System.out.println(sb);