package com.javase.reflect; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ResourceBundle; /** * 需求: * 1、通过反射机制,反编译一个类的属性(也就是说:拿到类的属性(Field)) * 2、在不改变Java源代码的情况下,能够对不同的类进行反编译操作 */ public class ReflectText07 { public static void main(String[] args) { //采用资源绑定器获取属性配置文件的内容(目的是通过改变属性配置文件的内容来反编译不同的类) ResourceBundle bundle = ResourceBundle.getBundle("info"); //通过key获取value String className = bundle.getString("className"); //为了实现字符串的拼接,创建一个StringBuilder对象 StringBuilder s = new StringBuilder(); try { Class studentClass = Class.forName(className); //通过类名获取该类 //拼接从类名开始 s.append(Modifier.toString(studentClass.getModifiers()) + " class " + studentClass.getSimpleName() + "{\n"); //获取类的属性(Field) Field[] fields = studentClass.getDeclaredFields(); //遍历foreach for (Field field : fields) { s.append("\t"); //缩进一个制表符 s.append(Modifier.toString(field.getModifiers())); //将获取的修饰符代表码int类型数据转换成字符串类型的修饰符 s.append(" "); //修饰符后面跟一个空格 s.append(field.getType().getSimpleName()); //简类名 s.append(" "); //简类名后面跟一个空格 s.append(field.getName()); //属性名 s.append(";\n"); //属性名后面是英文半角分号;和换行符 } s.append("}");//类的结束 System.out.println(s); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } 属性配置文件info.properties在IDEA中所处的目录结构图 属性配置文件info.properties内容 /* 程序运行结果: public final class Integer{ public static final int MIN_VALUE; public static final int MAX_VALUE; public static final Class TYPE; static final char[] digits; static final byte[] DigitTens; static final byte[] DigitOnes; static final int[] sizeTable; private final int value; public static final int SIZE; public static final int BYTES; private static final long serialVersionUID; } */