代码如下:
package api1_16;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Parameter;
public class demo3 {
public static void main(String[] args) throws Exception {
//定义字符缓冲区存
StringBuffer sb=new StringBuffer();
//获取类对象
Class cls=Class.forName("java.util.Date");
//获取包路径
Package pname=cls.getPackage();
/*
* 总结: 正斜杠(/) 反斜杆 \ :
* */
sb.append(pname+";"+"\n");
// System.out.println(pname);
//获取类的修饰符
String lssf=Modifier.toString(cls.getModifiers());
//获取类的名字
String lname=cls.getSimpleName();
sb.append(lssf+" class "+lname);
//获取类的父类
String fl=cls.getSuperclass().getSimpleName();
sb.append(" extends "+fl);
//获取所实现的接口
Class[] inf=cls.getInterfaces();
//没有实现任何接口就不要写了
if(inf.length!=0) {
sb.append(" implements ");
for(Class cl:inf) {
String jk=cl.getSimpleName();
sb.append(jk);
sb.append(",");
}
//去除最后的逗号
sb.deleteCharAt(sb.length()-1);
}
sb.append("{ ");
//1.获取属性
Field[] sx=cls.getDeclaredFields();
for(Field fname:sx) {
//属性修饰符
String xxssf=Modifier.toString(fname.getModifiers());
//属性类型
String sxlx=fname.getType().getSimpleName();
//属性名字
String sxmz=fname.getName();
sb.append("\n\t"+xxssf+" "+sxlx+" "+sxmz+";");
}
sb.append("\n");
//2.获取构造方法
Constructor[] constructor=cls.getDeclaredConstructors();
for(Constructor c:constructor) {
//构造方法修饰符
Modifier.toString(c.getModifiers());
//构造方法名字就是类名
cls.getSimpleName();
//构造方法的参数
Parameter[] p=c.getParameters();
/*Parameter 包括其名称和修饰符。 它还提供了获取参数属性的替代方法。
* */
sb.append("\n\t"+Modifier.toString(c.getModifiers())+" "+cls.getSimpleName());
sb.append("( ");
Class[] s=c.getParameterTypes();
appCanshu(sb,s,p);
sb.append(")").append("{ }");
}
sb.append("\n");
//获取成员方法
Method[] cyff=cls.getMethods();
for(Method m:cyff) {
//方法修饰符
String ms=Modifier.toString(m.getModifiers());
//方法名
String fm=m.getName();
//获得方法的返回值类型
String flx=m.getReturnType().getSimpleName();
//方法的参数
Parameter[] p=m.getParameters();
/*Parameter 包括其名称和修饰符。 它还提供了获取参数属性的替代方法。
* */
//方法三要素
sb.append("\n\t"+ms+" "+flx+" "+fm);
sb.append("( ");
/*getParameterTypes()
返回一个 类对象的数组, 类以声明顺序表示由该对象表示的可执行文件的形式参数类型。
* */
//获取方法的形参class数组
Class[] c=m.getParameterTypes();
//赋上参数
appCanshu(sb,c,p);
sb.append(")").append("{ }");
}
sb.append("\n\n }");
System.out.println(sb);
//写数据到文件(out_biany.java)里面去
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("out_biany.java"));
bos.write(sb.toString().getBytes());
bos.close();
}
//简化赋参数的方法
public static void appCanshu(StringBuffer sb,Class[] types,Parameter[] parameters) {
int num = 0;
for (int i = 0; i < types.length; i++) {
sb.append(types[i].getSimpleName());
sb.append(" ");
sb.append(parameters[i].getName());
sb.append(",");
num++;
}
// 删除多余的 ","
if (num > 0){
sb.deleteCharAt(sb.length()-1);
}
}
}
效果: