公开调用私有Java方法?

我们是Java开发人员,在Java中已知4种访问修饰符:私有,受保护,公共和包。 好吧,除了私有外,最后三个可以通过继承,相同的包或实例从类外部调用。

现在,常见的问题是,可以公开(从外部类中)公开私有吗? 答案是否定的。 使用“常规”方式访问它时为“否”,而使用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调用hackTesthackTestStatic 。 您可以在屏幕上看到输出。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言字符像素,返回字符串宽度 (以像素为单位)

[c]代码库#include #include #include #include int main(void){/* request auto detection */int gdriver DETECT, gmode, errorcode;int x 0, y 0;int i;char msg[80];/* initialize graphics and local variables */initgraph(&gdriver, &gmode, "");/…

Spring动态物业管理

静态和动态属性对于运营管理以及在生产级别更改系统行为都非常重要。 特别地,动态参数减少了服务中断。 本文展示了如何使用Quartz在Spring Applications中管理动态属性。 有关使用 Spring和Quartz集成提供“ 使用Spring和Quartz的多作业计划服务”的文章。 让我们看…

ADF任务流:页面片段的托管bean范围

介绍 当我们使用ADF任务流并需要实现一些特定于流的业务逻辑或存储一些与该流相关的信息时,我们通常使用pageFlowScope托管bean。 而且,当我们需要为流的活动(页面或页面片段)提供服务时,我们将较短的作用域用于此类托…

数据库事物操作

事务 什么是事务?转账:1. 给wc账户减1000元2. 给wcxf账户加1000元 当给wc账户减1000元后,抛出了异常!这会怎么样呢?我相信从此之后,wc再也不敢转账了。 使用事务就可以处理这一问题:把多个对数据库的操作绑…

android+4.4+稳定性,新系统新UI!台电A10h四核安卓4.4.2性能测试

国内著名商标,数码用户首选品牌的台电科技在12月20日全国首发了安卓4.4.2系统,并且运行台电全新tUI同时,支持从安卓4.2系统OTA一键升级至安卓4.4.2系统!作为国内首款升级到目前全球最新的Android4.4.2系统之后,整体性能…

网络知识点小结

VMware虚拟机三种联网方法及原理一、Brigde——桥接:默认使用VMnet0 1、原理: Bridge 桥"就是一个主机,这个机器拥有两块网卡,分别处于两个局域网中,同时在"桥"上,运行着程序,让…

在JUnit中超越核心Hamcrest

在通过JUnit和Hamcrest改进对assertEquals的文章中,我介绍了将Hamcrest与JUnit一起使用 。 然后,我查看了JUnit的内置Hamcrest Core Matcher支持 。 在本文中,我将介绍如何将Hamcrest的非核心匹配器与JUnit一起应用。 这些非核心匹配器默认情…

4pics1word android,4 Pics 1 Word

4 Pics 1 Word是一款非常有意思的看图猜词游戏,这款游戏中会给我们四张图片,玩家需要通过图片给出的信息来猜出是哪个词,看西西的介绍你可能以为这是一款千篇一律的看图猜词游戏,不过这里猜的不是中文而是英语单词。4 Pics 1 Word…

JAVA学习绘图颜色及其笔画属性设置字体显示文字

package com.graphics;import java.awt.*; import java.awt.geom.Rectangle2D; import java.util.Date;import javax.swing.*;/*** * author biexiansheng**/ public class DrawString extends JFrame{private Shape rect;//矩形对象private Font font;//字体对象private Date …

android原生系统开发板,安卓学习必备开发板-Rayeager PX2

由谷歌主导并推动的移动终端操作系统Android,由于其开源开放的特性,自发布之日起便受到全球各大IT厂商的欢迎。在各厂商的热情推动下,基于Android系统的手机、平板、智能手表等各类产品层出不穷,迅速普及到人们的日常生活&#xf…

热点中的即时编译器(JIT)

即时编译器(JIT)的概念以及更广泛的自适应优化是除Java(.Net,Lua,JRuby)之外的许多语言中众所周知的概念。 为了解释什么是JIT编译器,我想先定义一个编译器概念。 根据维基百科,编译…

jq查找字段忽略html标签,jQuery过滤HTML标签并高亮显示关键字的方法

本文实例讲述了jQuery过滤HTML标签并高亮显示关键字的方法。分享给大家供大家参考。具体如下:jQuery实现网页关键字过滤效果,将需要过滤的文字定义在JavaScript中,可定义多个,不过要修改JS代码为数组,这样可过滤出多个…

java.lang.NoClassDefFoundError:如何解决–第1部分

线程“ main”中的异常java.lang.NoClassDefFoundError是开发Java EE企业版或独立Java应用程序时可能会遇到的常见难题之一。 根本原因分析和解决过程的复杂性主要取决于Java EE中间件环境的大小。 特别是考虑到各种Java EE应用程序中存在大量的ClassLoader。 我向您建议的一系…

android 日期国际化,Flutter 日期时间选择类控件及国际化

注意:无特殊说明,Flutter版本及Dart版本如下:Flutter版本: 1.12.13hotfix.5Dart版本: 2.7.0DatePickerFlutter并没有DatePicker这个控件,需要使用showDatePicker方法弹出日期选择控件,基本用法如…

权威发布 鸿蒙涅槃,鸿蒙涅槃 曾圣《鸿蒙》雕塑走进河北美院受追捧

原标题:鸿蒙涅槃 曾圣《鸿蒙》雕塑走进河北美院受追捧2019年10月20日上午10时曾圣《鸿蒙》雕塑作品展——暨河北美院首场新闻媒体发布会在河北美术学院雕塑院举办。河北美术学院校长甄忠义、河北美术学院党委书记高国忠、常务副校长张建敏、党委副书记甄心恒、副校长…

Rube GoldbergSpring整合

Spring Integration为集成系统所涉及的某些复杂性提供了非常好的抽象-Spring Integration从Integration的角度来看非常适合Facade的定义-简化了对复杂底层系统的访问。 为了说明这一点,请考虑一个简单的系统,该系统仅接收一条消息,然后将其发…

java ajax html复选框,HTMLjavaSkcriptCSSjQueryajax(九)(示例代码)

一、HTML1、单选按钮 Male Female2、复选框 I have a Car3、下拉列表 VoloFita如果设置某项选定直接 fem4、设置文本域 创建按钮 5、Runnob.com因为a 标签的target属性名是inframe_a的iframe框架,点击链接后页面会在iframe 中出现。6、脚本 JavaScript …

管理Jenkins作业配置

在JBoss工具和Developer Studio中,我们在Jenkins中管理许多构建作业。 实际上,对于3.2.x / 4.x和3.3.x / 5.x流,有195个以上的作业。 当我们开始建立明年的第一个里程碑时,我们将再产生40多个工作岗位。 这里是其中的一些&#xf…

Redis命令拾遗三(列表List类型)

本文版权归博客园和作者吴双本人共同所有。转载和爬虫请注明原文地址 Redis五种数据类型之列表类型Redis五种数据类型之列表类型。你可以存储一个有序的字符串列表一类数据。比如你想展示你所存储的所有文章中的前十条,当分页取下一页的时候,你也可以取接…

计算机桌面上的声音图标没了怎么办,电脑声音图标不见了怎么办超详细教程

我们在用电脑或者平板看视频、听歌的时候,如果声音不合适,大了或小了就会调节音量,除了可以选择设备自带的外部音量大小调节按键外,还可以用自带的声音图标来调节,而屏幕上的声音图标是最方便的。如果屏幕上的声音图标…