zoukankan      html  css  js  c++  java
  • Java连载118-编译一个类(包括内部函数、方法、类型、参数)

    一、反编译一个类(包括内部函数、方法、类型、参数)

    package com.bjpowernode.java_learning;
    
    ​
    
    public class D118_CustomerService {
    
      public boolean login(String name,String  pwd) {
    
        if("admin".contentEquals(name) && "123".contentEquals(pwd)) {
    
          return true;
    
        }
    
        return false;
    
      }
    
      public void logout() {
    
        System.out.println("系统已经安全退出");
    
      }
    
    ​
    
    }

    package com.bjpowernode.java_learning;
    
    import java.lang.reflect.*;
    
    ​
    
    public class D118_1_MethodOfDecompilation {
    
      public static void main(String[] args) throws Exception {
    
        //获取类
    
        Class c = Class.forName("com.bjpowernode.java_learning.D118_CustomerService");
    
        //获取所有方法,Method是reflect中的类,是获取反编译的类里面的方法
    
        Method[] ms = c.getDeclaredMethods();
    
       
    
        for (Method m:ms) {
    
          //返回修饰符
    
          System.out.println(Modifier.toString(m.getModifiers()));
    
          //方法的返回值类型
    
          Class returnType = m.getReturnType();
    
          System.out.println(returnType.getSimpleName());
    
          //返回方法名
    
          System.out.println(m.getName());
    
          //方法的形式参数列表
    
          Class[] parameterTypes = m.getParameterTypes();
    
          for(Class x:parameterTypes) {
    
            System.out.println(x.getSimpleName());
    
          }
    
          System.out.println("====================");
    
        }
    
        StringBuffer sb = new StringBuffer();
    
        sb.append(Modifier.toString(c.getModifiers())+" class ");
    
        sb.append(c.getSimpleName()+"{
    ");
    
        for(Method m:ms) {
    
          sb.append("	");
    
          sb.append(Modifier.toString(m.getModifiers())+" ");
    
          sb.append(m.getReturnType().getSimpleName() + " ");
    
            sb.append(m.getName()+"(");
    
            //形参
    
            Class[] parameterTypes = m.getParameterTypes();
    
            for (int i=0;i<parameterTypes.length;i++) {
    
              Class parameterType = parameterTypes[i];
    
              if(i==parameterTypes.length-1) {
    
                sb.append(parameterType.getSimpleName());
    
              }else {
    
                sb.append(parameterType.getSimpleName()+",");
    
              }
    
    ​
    
            }
    
            sb.append("){}
    ");
    
           
    
        }
    
        sb.append("}");
    
        System.out.println(sb);
    
      }
    
    ​
    
    }

    二、源码:

    D118_1_MethodOfDecompilation.java

    D118_CustomerService.java

    https://github.com/ruigege66/Java/blob/master/D118_1_MethodOfDecompilation.java

    https://github.com/ruigege66/Java/blob/master/D118_CustomerService.java

    2.CSDN:https://blog.csdn.net/weixin_44630050

    3.博客园:https://www.cnblogs.com/ruigege0000/

    4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

     

  • 相关阅读:
    new
    如何在win7上面安装python的包
    进程
    网络编程模块的使用
    面向对象基础与实例
    类与对象的属性与使用方法
    基础面向对象与面向过程
    RE模块垃圾回收机制
    常用函数模块
    thinkphp6 find_in_set使用实例
  • 原文地址:https://www.cnblogs.com/ruigege0000/p/12969809.html
Copyright © 2011-2022 走看看