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);

  }

}

119.1

通过放射机制,我们模糊的执行了某个类的方法,相比之前的直接创建一个对象更加灵活。
二、反编译某个类的所有构造方法
我们先分别演示单个函数的修复符、构造方法名,然后通过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);
    
  }

}

119.2
119.3

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值