• Java连载119-反编译类的某个方法已经构造方法


    一、获取某个特定的方法,通过​反射机制。

    package com.bjpowernode.java_learning;
    
    import java.lang.reflect.*;
    
    ​
    
    public class D119_1_ReflectMethodOfSpecialClass {
    
      public static void main(String[] args) throws Exception{
    
        /**
    
         * D118_CustomerService cs = new D118_CustomerService();
    
         * boolean isSucess = cs.login("admin","123");
    
         *
    
         *  接下来通过反射的方法,来获取某一个类的某个函数
    
         * 
    
         */
    
        //1.获取类
    
        Class c = Class.forName("com.bjpowernode.java_learning.D118_CustomerService");
    
        //2.获取某个特定的方法
    
        //通过:方法名+形参列表
    
        Method m = c.getDeclaredMethod("login",String.class,String.class);
    
        //login是D118_CustomerSercice中存在的类
    
       
    
        //通过反射机制执行login方法
    
        Object o = c.newInstance();
    
       
    
        //调用o对象的m方法,传递"admin","123"参数,方法的执行结果是retValue
    
        Object retValue = m.invoke(o,"admin","123");
    
        //打印出来
    
        System.out.println(retValue);
    
    ​
    
      }
    
    ​
    
    }

    ​通过放射机制,我们模糊的执行了某个类的方法,相比之前的直接创建一个​对象更加灵活。

    二、反编译某个类的所有构造方法

    我们先分别演示单个函数的修复符、构造方法名,然后通过StringBuffer来写出​所有的构造方法。​

    package com.bjpowernode.java_learning;
    
    ​
    
    import java.lang.reflect.*;
    
    ​
    
    public class D119_2_DecompilationOfAllConstructer {
    
      public static void main(String[] args) throws Exception{
    
        //1.获取一个类
    
        Class c = Class.forName("java.lang.String");
    
        //2.获取所有的构造方法
    
        Constructor[] cs = c.getDeclaredConstructors();
    
       
    
        for(Constructor con:cs) {
    
          //获取修饰符
    
          System.out.println(Modifier.toString(con.getModifiers()));
    
         
    
          //获取构造方法名
    
          System.out.println(c.getName());
    
         
    
          //构造方法的形式参数列表
    
          Class[] parameterTypes = con.getParameterTypes();
    
          for(Class parameterType:parameterTypes) {
    
            System.out.println(parameterType.getSimpleName());
    
          }
    
          System.out.println("=================");
    
        }
    
       
    
       
    
        //反编译
    
        StringBuffer sb = new StringBuffer();
    
        sb.append(Modifier.toString(c.getModifiers())+" class"+c.getSimpleName() + "{
    ");
    
        //构造方法
    
        for(Constructor con:cs) {
    
          sb.append("	");
    
          sb.append(Modifier.toString(con.getModifiers()) + " ");
    
          sb.append(c.getSimpleName()+"(");
    
          Class[] parameterTypes = con.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);
    
       
    
      }
    
    ​
    
    }

    三、源码:

    D119_1_ReflectMethodOfSpecialClass.java

    D119_2_DecompilationOfAllConstructer.java

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

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

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

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

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

     

  • 相关阅读:
    pixysoft.framework.messageflow enterprise edition 开发实录
    软件工程革命三部曲 — 系统开发分类与重用说明
    vs2010 premium版本 使用小结 更多是问题。。
    报表引擎终于做出来了!!!
    报表引擎终于做出来了!!!!!参考了根兄的文档。
    页面驱动开发(Page Driven) —— 一种大多数人还不认同的技术
    从SOA到云计算 我个人理解
    谈谈Exception,什么时候抛出?什么时候接住? 二
    软件工程革命三部曲 —— 系统开发的业务部分重构在思考。
    Pixysoft.Framework.Reports 开发实录
  • 原文地址:https://www.cnblogs.com/ruigege0000/p/13022608.html
Copyright © 2020-2023  润新知