//实现反编译的类,现在可以判断具体有哪些方法,但是方法里面的具体细节还不能输出
importjava.lang.reflect.Constructor;importjava.lang.reflect.Field;importjava.lang.reflect.Method;importjava.lang.reflect.Modifier;importjava.lang.reflect.Parameter;public classDecompile {private Class>c;privateReflect reflect;privateString className;publicDecompile(String className){try{this.className =className;
c=Class.forName(className);
reflect=(Reflect)c.newInstance();
}catch(ClassNotFoundException e) {//TODO Auto-generated catch block
e.printStackTrace();
}catch(InstantiationException e) {//TODO Auto-generated catch block
e.printStackTrace();
}catch(IllegalAccessException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}//获得构造方法
public voidgetConstructFuntion(){
Constructor[] constructors=c.getConstructors();for(Constructor constructor:constructors){
System.out.println(
Modifier.toString(constructor.getModifiers())+" "
+constructor.getName()+"("
+getParameter(constructor)+"){}");
}
}//获得类信息
public voidgetClassInfo(){try{
System.out.println(
Modifier.toString(c.getModifiers())+" class"
+className+"{");
}catch(SecurityException e) {//TODO Auto-generated catch block
e.printStackTrace();
}catch(IllegalArgumentException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}//获得类属性信息
public voidgetProperty(){
Field[] fields=c.getDeclaredFields();for(Field field:fields){
field.setAccessible(true);try{
System.out.println(
Modifier.toString(field.getModifiers())+" "
+field.getType().getSimpleName()+" "
+field.getName()+" = "
+field.get(reflect)+";");
}catch(IllegalArgumentException e) {//TODO Auto-generated catch block
e.printStackTrace();
}catch(IllegalAccessException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}
}//获得类方法信息
public voidgetFuntion(){
Method[] methods=c.getDeclaredMethods();for(Method method:methods){
System.out.println(
Modifier.toString(method.getModifiers())+" "
+method.getReturnType().getSimpleName()+" "
+method.getName().toString()+"("
+getParameter(method)+"){}");
}
}//获得参数字符串
publicString getParameter(Object obj){
Parameter[] parameters=null;if("Method".equals(obj.getClass().getSimpleName())){
parameters=((Method)obj).getParameters();
}else{
parameters=((Constructor)obj).getParameters();
}
StringBuffer sb= newStringBuffer();int count = 0;for(Parameter parameter:parameters){if(count!=0){
sb.append(",");
}
sb.append(parameter.getType().getSimpleName()+" "
+parameter.getName().toString());
count++;
}returnsb.toString();
}
}