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

     

  • 相关阅读:
    把时间转换成你要的格式
    用正则表达式限制文本框只能输入数字,小数点,英文字母,汉字等各类代码
    .NET(C#) win Form窗體常用設置
    合并两个DataTable
    truncate,delete,drop的异同点
    两个关于.NET读取EXCEL文件的问题,记下来,很有用!
    RCP之病人信息系统开发总结(8):MVC模式之View层—操作
    RCP之病人信息系统开发总结(9):MVC模式之View层—对话框
    RCP之病人信息系统开发总结(12):部署RCP应用程序
    RCP之病人信息系统开发总结(10):MVC模式之View层—首选项
  • 原文地址:https://www.cnblogs.com/ruigege0000/p/13022608.html
Copyright © 2020-2023  润新知