zoukankan      html  css  js  c++  java
  • 利用反射反编译某个类

    1.首先创建一个员工类(可以反编译员工类,也可以编译String类或者其他类都可)

    public class Employee {
    
        static {
            System.out.println("Employee静态语句块执行。。。");
        }
    
        private String name;
    
        private int age;
    
        private boolean gender;
    
        public Employee(){}
    
        public Employee(String name){}
    
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public boolean isGender() {
            return gender;
        }
    
        public void setGender(boolean gender) {
            this.gender = gender;
        }
    
    
    }

    2.编写反编译代码

    public class ReflectTest01 {
        public static void main(String[] args) {
    
            // 拿到Employee的class类
            Class c1 = String.class;
    
            // 获取Employee的所有属性<数组>
            Field[] fields = c1.getDeclaredFields();
    
            // 获取Employee的所有方法
            Method[] methods = c1.getDeclaredMethods();
    
            StringBuffer sb = new StringBuffer();
    
            // 类的修饰符+类的简单类名
            sb.append(Modifier.toString(c1.getModifiers()) + " class " + c1.getSimpleName() + " {
    ");
    
            // 遍历所有属性
            for (Field field : fields) {
                // 属性的修饰符
                sb.append("	" + Modifier.toString(field.getModifiers()) + " ");
                // 属性的简单类名
                sb.append(field.getType().getSimpleName() + " ");
                // 属性的名称
                sb.append(field.getName() + ";
    ");
            }
    
            sb.append("	===================分割线===========================
    ");
    
            // 遍历所有方法
            for (Method method : methods) {
                // 方法的修饰符
                sb.append("	" + Modifier.toString(method.getModifiers()) + " ");
                // 返回值类型的简单类名
                sb.append(method.getReturnType().getSimpleName() + " ");
                // 方法的方法名
                sb.append(method.getName() + "(");
                // 形式参数列表
                Class[] parameterTypes = method.getParameterTypes();
                for (int i = 0; i < parameterTypes.length; i++) {
                    if (i == parameterTypes.length - 1) {
                        sb.append(parameterTypes[i].getSimpleName() + " args");
                    } else {
                        sb.append(parameterTypes[i].getSimpleName() + " args,");
                    }
    
                }
                sb.append("){ }
    ");
            }
            sb.append("}");
            System.out.println(sb);
    
        }
    
    
    }

    3.控制台输出

    public final class String {
        private final char[] value;
        private int hash;
        private static final long serialVersionUID;
        private static final ObjectStreamField[] serialPersistentFields;
        public static final Comparator CASE_INSENSITIVE_ORDER;
        ===================分割线===========================
        public boolean equals(Object args){ }
        public String toString(){ }
        public int hashCode(){ }
        public volatile int compareTo(Object args){ }
        public int compareTo(String args){ }
        public int indexOf(String args,int args){ }
        static int indexOf(char[] args,int args,int args,String args,int args){ }
        static int indexOf(char[] args,int args,int args,char[] args,int args,int args,int args){ }
        public int indexOf(int args){ }
        public int indexOf(String args){ }
        public int indexOf(int args,int args){ }
        public static String valueOf(char args){ }
        public static String valueOf(Object args){ }
        public static String valueOf(boolean args){ }
        public static String valueOf(char[] args,int args,int args){ }
        public static String valueOf(char[] args){ }
        public static String valueOf(double args){ }
        public static String valueOf(float args){ }
        public static String valueOf(long args){ }
        public static String valueOf(int args){ }
        private static void checkBounds(byte[] args,int args,int args){ }
        public int length(){ }
        public boolean isEmpty(){ }
        public char charAt(int args){ }
        public int codePointAt(int args){ }
        public int codePointBefore(int args){ }
        public int codePointCount(int args,int args){ }
        public int offsetByCodePoints(int args,int args){ }
        public void getChars(int args,int args,char[] args,int args){ }
         void getChars(char[] args,int args){ }
        public byte[] getBytes(){ }
        public byte[] getBytes(String args){ }
        public void getBytes(int args,int args,byte[] args,int args){ }
        public byte[] getBytes(Charset args){ }
        public boolean contentEquals(StringBuffer args){ }
        public boolean contentEquals(CharSequence args){ }
        private boolean nonSyncContentEquals(AbstractStringBuilder args){ }
        public boolean equalsIgnoreCase(String args){ }
        public int compareToIgnoreCase(String args){ }
        public boolean regionMatches(int args,String args,int args,int args){ }
        public boolean regionMatches(boolean args,int args,String args,int args,int args){ }
        public boolean startsWith(String args){ }
        public boolean startsWith(String args,int args){ }
        public boolean endsWith(String args){ }
        private int indexOfSupplementary(int args,int args){ }
        public int lastIndexOf(int args,int args){ }
        static int lastIndexOf(char[] args,int args,int args,char[] args,int args,int args,int args){ }
        static int lastIndexOf(char[] args,int args,int args,String args,int args){ }
        public int lastIndexOf(String args,int args){ }
        public int lastIndexOf(int args){ }
        public int lastIndexOf(String args){ }
        private int lastIndexOfSupplementary(int args,int args){ }
        public String substring(int args){ }
        public String substring(int args,int args){ }
        public CharSequence subSequence(int args,int args){ }
        public String concat(String args){ }
        public String replace(char args,char args){ }
        public String replace(CharSequence args,CharSequence args){ }
        public boolean matches(String args){ }
        public boolean contains(CharSequence args){ }
        public String replaceFirst(String args,String args){ }
        public String replaceAll(String args,String args){ }
        public String[] split(String args,int args){ }
        public String[] split(String args){ }
        public static transient String join(CharSequence args,CharSequence[] args){ }
        public static String join(CharSequence args,Iterable args){ }
        public String toLowerCase(Locale args){ }
        public String toLowerCase(){ }
        public String toUpperCase(){ }
        public String toUpperCase(Locale args){ }
        public String trim(){ }
        public char[] toCharArray(){ }
        public static transient String format(Locale args,String args,Object[] args){ }
        public static transient String format(String args,Object[] args){ }
        public static String copyValueOf(char[] args,int args,int args){ }
        public static String copyValueOf(char[] args){ }
        public native String intern(){ }
    }

    将String类的全部属性和方法都反编译出来了。。。挺有意思

  • 相关阅读:
    20个软件开发常用设计文档大全下载
    php短信接口(基于商麦无限)
    PHP与ajax,无刷新表单提交
    解决GD中文乱码问题
    php中json_decode()和json_encode()的使用方法
    一些页面自动跳转的实现
    已损坏文档修复
    php中从结果集获取一条数据和所有数据的方法函数
    VIM 用法小记
    PHP与JavaScript下的Cookie操作
  • 原文地址:https://www.cnblogs.com/zhangjianbing/p/8469655.html
Copyright © 2011-2022 走看看