-
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
出 处:https://www.cnblogs.com/ruigege0000/p/13022608.html
栏目列表
最新更新
springboot~某个接口模拟登录并同步给feig
Java反射中与自动装箱有关的坑及其解决方
java 基础语法学习
面试被问Java序列化和反序列化为什么要实
你还在用命令看日志?快用 Kibana 吧,一
【JAVA并发第一篇】Java的进程与线程
【JAVA并发第四篇】线程安全
初窥MyBatis-普通的CRUD操作
mybatis(1)
HTTP常用请求头大揭秘
MongoDB常用命令(2)
MongoDB基本介绍与安装(1)
SQLServer触发器调用JavaWeb接口
SQL Server索引的原理深入解析
SqlServer2016模糊匹配的三种方式及效率问题
SQL中Truncate的用法
sqlserver 多表关联时在where语句中慎用tri
链接服务器读取Mysql---出现消息 7347,级别
SQL Server解惑——为什么你拼接的SQL语句换
MySQL视图了解一下
es6 快速入门 系列 —— 类 (class)
前端 Validform.js属性,用法及Ajax提交简介
前端甘特图dhtmx-gantt
Typescript开发学习总结(附大量代码)
koa2+mock实现一个数据服务器
JavaScript 面向对象编程思想的理解
js原型和原型链
有关Js 创建对象的几种方式
Js 原型链
js中的隐式转换