模拟反编译,输出一个类的属性及方法
程序员文章站
2022-03-23 22:48:02
模拟反编译,输出一个类的属性及方法:测试代码:package reflect;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;public class Test12 { public static void main(String[] args) { // 反射获取一个类 String className...
模拟反编译,输出一个类的属性及方法:
测试代码:
package reflect;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class Test12 {
public static void main(String[] args) {
// 反射获取一个类
String className = "java.lang.Object";
Class theClass = null;
try {
theClass = Class.forName(className);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// 创建一个字符串拼接对象
StringBuilder s = new StringBuilder();
// 连接访问修饰符,类名
s.append(Modifier.toString(theClass.getModifiers()) + " "
+ theClass.getSimpleName() + " {\n");
// 获取类中所有的属性成员
Field[] fields = theClass.getDeclaredFields();
for (Field f : fields) {
// 样例:(1)public int id; (2)String name;
s.append(" "); // 制表符
String modStr = Modifier.toString(f.getModifiers()); // 访问修饰符
if (!modStr.isEmpty()) s.append(modStr + " ");
s.append(f.getType().getSimpleName() + " "); // 变量类型
s.append(f.getName() + ";\n"); // 变量名
}
s.append("\n");
// 获取类中所有的方法
Method[] methods = theClass.getDeclaredMethods();
for (Method m : methods) {
// 样例:(1)public int doSome(int, String) { } (2)native void doOther();
s.append(" "); // 制表符
String modStr = Modifier.toString(m.getModifiers()); // 访问修饰符
if (!modStr.isEmpty()) s.append(modStr + " ");
s.append(m.getReturnType().getSimpleName() + " "); // 返回值类型
s.append(m.getName() + "("); // 方法名
// 追加形式参数类型列表
Class[] parTypes = m.getParameterTypes();
for (Class par : parTypes) {
s.append(par.getSimpleName() + ", ");
}
if (parTypes.length > 0) {
s.deleteCharAt(s.length() - 1); // 删除空格
s.deleteCharAt(s.length() - 1); // 删除逗号
}
s.append(")");
// 如果不是抽象方法,也不是native修饰的方法,才有方法体
if (!modStr.contains("abstract") && !modStr.contains("native")) {
s.append(" { }\n");
} else { // 是抽象方法或者native修饰的方法,没有方法体,以“;”结尾
s.append(";\n");
}
}
s.append("}");
System.out.println(s);
}
}
运行截图:
本文地址:https://blog.csdn.net/pipizhen_/article/details/107599554
上一篇: 工作5年的Java程序员告诉你,为什么要阅读底层源码
下一篇: spring boot集成selenium,chromedriver 自动化测试 启动不报错com.google.common.util.concurrent(从安装配置到运行成功)
推荐阅读
-
PHP获取类中常量,属性,及方法列表的方法
-
PHP取得一个类的属性和方法的实现代码
-
SpringCache @Cacheable 在同一个类中调用方法,导致缓存不生效的问题及解决办法
-
Java-利用反射访问类的私有(private)属性及方法&private的意义
-
设计静态方法模拟一对骰子。也就是说,随机出现一对 1, 2, 3, 4, 5, 6 之间的一个数。要求显示第一个骰子上的数,再显示第二个骰子上的数,最后输出显示两个数之和。
-
模拟反编译,输出一个类的属性及方法
-
冬虫夏草的功效与作用及食用方法 PHP获取类中常量,属性,及方法列表的方法
-
PHP获取类中常量,属性,及方法列表的方法
-
定义了一个类,在类中写了很多的方法对html代码进行拼接,怎么在页面中输出呢?
-
PHP获取类中常量,属性,及方法列表的方法_PHP教程