公开调用私有Java方法?
现在,常见的问题是,可以公开(从外部类中)公开私有吗? 答案是否定的。 使用“常规”方式访问它时为“否”,而使用Java本身提供的Reflection API“侵入”它时为“是”。
好吧,现在编写我们将要破解的代码。 我称它为“ 受害者 ”
package com.namex.hack;public class TheVictim {private void hackTest() {System.out.println("hackTest called");}private static void hackTestStatic() {System.out.println("hackTestStatic called");}}
现在,在此之后,只需遵循我的代码并尝试运行它即可。 我保证,如果您遵循正确,将使TheVictim调用hackTest和hackTestStatic 。 您可以在屏幕上看到输出。
package com.namex.hack;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;public class HackTest {public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {Class c = TheVictim.class;Method[] ms = c.getDeclaredMethods();for (Method each : ms) {String methodName = each.getName();each.setAccessible(true); // this is the keyif (Modifier.isPrivate(each.getModifiers())) {if (Modifier.isStatic(each.getModifiers())) {// static doesnt require the instance to call it.each.invoke(TheVictim.class, new Object[] {});} else {each.invoke(new TheVictim(), new Object[] {});}}}}
}
输出示例 :
hackTestStatic called
hackTest called
好的,本教程已达到目的。 现在您知道Java的Reflection API是编程语言的非常强大的功能。 完全取决于您自己的目的来修改或扩展它。 玩Java
参考: 公开调用私有方法? 来自我们的JCG合作伙伴 Ronald Djunaedi,来自Naming Exception博客。
翻译自: https://www.javacodegeeks.com/2012/06/calling-private-java-methods-publicly.html
公开调用私有Java方法?相关推荐
- ajax调用后台java方法,jquery ajax再次封装,前台调用后台java方法直接返回数据
一,前台js部分代码 /** * bean参数格式:类全限定名.方法名 opt参数格式:键值对 handleResponse:会function类型参数包含一个参数data,为后台返回json数据 ...
- android webview java_Android Webview中调用本地java方法
在网页调用本地的分享SDK class JsObject { @JavascriptInterface public String toString() { return "injected ...
- JNI中C调用Java方法
我们需要在JNI的C代码调用Java代码.实现原理:使用JNI提供的反射借口来反射得到Java方法,进行调用. JNI关键方法讲解. 1. 在同一个类中,调用其他方法 JNIEXPORT voi ...
- cocos2d js调用java_【cocos2d-js官方文档】二十四、如何在android平台上使用js直接调用Java方法...
在cocos2d-js 3.0beta中加入了一个新特性,在android平台上我们可以通过反射直接在js中调用java的静态方法.它的使用方法很简单: var o = jsb.reflection. ...
- 本地方法(JNI)——调用 java 方法
[0]README 1) 本文部分文字描述 转自 core java volume 2 , 旨在理解 本地方法(JNI)--调用 java 方法 的基础知识 : 2) C语言调用java 方法,包括: ...
- android jni 结构体_Android应用开发Android JNI-c/c++调用java方法
本文将带你了解Android应用开发Android JNI-c/c++调用java方法,希望本文对大家学Android有所帮助. " Android JNI-c/c++调用java方法, ...
- 【cocos2d-js官方文档】二十四、如何在android平台上使用js直接调用Java方法
在cocos2d-js 3.0beta中加入了一个新特性,在Android平台上我们可以通过反射直接在js中调用Java的静态方法.它的使用方法很简单: var o = jsb.reflection. ...
- C++调用Java方法
最近在搞JNI那块,发现网上很多都是Java调用JNI,然后再调用C++的方法.而当C++函数里调用Java的方法,网上的文章可以说是少之又少,所以写此篇文章共勉.... 本文介绍两种方法,一是C++ ...
- Java方法完整调用链生成工具
1. 前言 在很多场景下,如果能够生成Java代码中方法之间的调用链,是很有帮助的,例如分析代码执行流程.确认被修改代码的影响范围.代码审计/漏洞分析等. IDEA提供了显示调用指定Java方法向上的 ...
最新文章
- Linux下用户组、文件权限
- 最佳拟合直线_JAVA
- ERC20 Short Address Attack
- VMware共享文件夹遇到的问题
- Android中文API(136) —— Bitmap
- html保存导入word文档格式,WordPress网站在导入Word文档时如何保持原有格式
- 67.二进制求和 (力扣leetcode) 博主可答疑该问题
- 3D数学基础学习笔记(Unity3d)
- ngod规范_[转载]NGOD一些感悟
- 超图s3m服务加载时添加token
- 12 序列化器Serializer的使用
- Canoe-基于14229的UDS自动化测试脚本CAPL 这适用于CANoe无diva的测试脚本
- 视觉SLAM十四讲笔记-第四讲 李群与李代数
- oswatch的安装和使用(转)
- 基于Python/Capl脚本 对通信矩阵报文(Flexray/Can)的周期检测(二)
- Js放在head和body中的区别
- java驱动打印机_本地打印机驱动程序如何找到网络打印机?
- DM3730 上实现WM6
- EasyExcel 实现多个Sheet页导出
- java抓取工具_抓取工具Web-Harvest - dayang2001911 - JavaEye技术网站
热门文章
- (精华)转:RDD:创建的几种方式(scala和java)
- kata_FizzBu​​zz Kata与Java流
- java8 从数组获取流_从数组到流再到Java 8
- jboss eap 7.0_是时候抛弃Java 7 – JBoss EAP 6.4了!
- 图片大小 媒体大小自适应_自适应堆大小
- 如何在CircleCI上构建支持Graal的JDK8?
- 自动化测试在CI CD管道中的作用
- 使用CUBA进行开发–是Spring的重大转变吗?
- java web 刷新_Java Web项目的保存和刷新
- @async方法不调用了_在Spring中使用Future对象调用Async方法调用