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

2020-06-01 16:05:01来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

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() + "{\n");

    //构造方法

    for(Constructor con:cs) {

      sb.append("\t");

      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("){}\n");

    }

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

 

 


原文链接:https://www.cnblogs.com/ruigege0000/p/13022608.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:class.getResourceAsStream获取结果为NULL idea配置问题

下一篇:Spring boot Sample 003之spring-boot-configuration-properties