模拟反编译,输出一个类的构造方法
测试代码:
package reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
public class Test14 {
public static void main(String[] args) {
// 反射获取一个类
Class theClass = null;
try {
theClass = Class.forName("java.lang.String");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// 创建字符串连接对象
StringBuilder s = new StringBuilder();
// 追加类名及修饰符列表
s.append(Modifier.toString(theClass.getModifiers()) + " ");
s.append(theClass.getSimpleName() + " {\n");
// 获取构造方法
Constructor[] constructors = theClass.getDeclaredConstructors();
// 遍历构造方法
for (Constructor c : constructors) {
// 样例:public String(byte[], int, int) { }
s.append("\t"); // 制表符
String modStr = Modifier.toString(c.getModifiers()); // 修饰符列表
if (!modStr.isEmpty()) s.append( modStr + " ");
s.append(theClass.getSimpleName() + " ("); // 类名
// 获取形式参数列表
Class[] parTypes = c.getParameterTypes();
for (Class p : parTypes) {
s.append(p.getSimpleName() + ", ");
}
if (parTypes.length > 0) {
s.deleteCharAt(s.length() - 1); // 删除空格
s.deleteCharAt(s.length() - 1); // 删除逗号
}
s.append(") { }\n");
}
s.append("}");
System.out.println(s);
}
}
运行截图: