package com.****.*****;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
/**
* @author Lico
* 2019/3/18
*/
public class ReflactionTest {
public static void main(String[] args) throws ClassNotFoundException {
System.out.println(getReflactionInfo("java.lang.Math"));
}
private static StringBuilder getReflactionInfo(String s) throws ClassNotFoundException {
Class class1 = Class.forName(s);
StringBuilder sb = new StringBuilder();
//1.声明类部分
//修饰符
sb.append(Modifier.toString(class1.getModifiers()));
sb.append(" class ");
//类名
sb.append(class1.getSimpleName());
//父类
Class superclass = class1.getSuperclass();
if (superclass != Object.class) {
sb.append(" extends ");
sb.append(superclass.getSimpleName());
}
//接口
Class[] interfaces = class1.getInterfaces();
if (interfaces.length > 0) {
sb.append(" impletmens ");
for (int i = 0; i < interfaces.length; i++) {
sb.append(interfaces[i].getSimpleName());
if (i<interfaces.length-1){
sb.append(",");
}
}
}
sb.append("{");
//2 字段
Field[] declaredFields = class1.getDeclaredFields();
for (int i = 0;i<declaredFields.length;i++){
//修饰符
sb.append("\n\t"+Modifier.toString(declaredFields[i].getModifiers()));
//声明类型
sb.append( " "+declaredFields[i].getType().getSimpleName());
//变量名
sb.append(" " + declaredFields[i].getName()+";");
}
//3 构造方法
Constructor[] constructors = class1.getConstructors();
for (int i =0;i<constructors.length;i++){
//获取修饰符
sb.append("\n\t"+Modifier.toString(constructors[i].getModifiers()));
//方法名(也就是类名)
sb.append(" "+ class1.getSimpleName());
sb.append("(");
//参数类型
Class[] parameterTypes = constructors[i].getParameterTypes();
for (int j = 0;j<parameterTypes.length;j++){
//参数类型
sb.append(parameterTypes[j].getTypeName());
if (j<parameterTypes.length-1){
//如果不是最后一个 加个逗号
sb.append(",");
}
}
//构造方法结尾
sb.append("){}");
}
//4 方法
Method[] methods = class1.getMethods();
for (int i =0;i<methods.length;i++){
//修饰符
sb.append("\n\t"+Modifier.toString(methods[i].getModifiers()));
//返回值类型
sb.append(" "+methods[i].getReturnType().getSimpleName());
//方法名
sb.append(" "+methods[i].getName()+"(");
//返回值类型
Class<?>[] parameterTypes = methods[i].getParameterTypes();
for (int j = 0;j<parameterTypes.length;j++){
sb.append(parameterTypes[j].getSimpleName());
if (parameterTypes.length-1>j){
sb.append(",");
}
}
sb.append("){}");
}
sb.append("\n}");
return sb;
}
}
Java零基础-自学反射
最新推荐文章于 2022-12-15 22:45:00 发布