日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

公开调用私有Java方法?

發(fā)布時間:2023/12/3 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 公开调用私有Java方法? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
我們是Java開發(fā)人員,在Java中已知4種訪問修飾符:私有,受保護,公共和包。 好吧,除了私有外,最后三個可以通過繼承,相同的包或?qū)嵗龔念愅獠空{(diào)用。

現(xiàn)在,常見的問題是,可以公開(從外部類中)公開私有嗎? 答案是否定的。 使用“常規(guī)”方式訪問它時為“否”,而使用Java本身提供的Reflection API“侵入”它時為“是”。

好吧,現(xiàn)在編寫我們將要破解的代碼。 我稱它為“ 受害者

package com.namex.hack;public class TheVictim {private void hackTest() {System.out.println("hackTest called");}private static void hackTestStatic() {System.out.println("hackTestStatic called");}}

現(xiàn)在,在此之后,只需遵循我的代碼并嘗試運行它即可。 我保證,如果您遵循正確,將使TheVictim調(diào)用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

好的,本教程已達到目的。 現(xiàn)在您知道Java的Reflection API是編程語言的非常強大的功能。 完全取決于您自己的目的來修改或擴展它。 玩Java

參考: 公開調(diào)用私有方法? 來自我們的JCG合作伙伴 Ronald Djunaedi,來自Naming Exception博客。


翻譯自: https://www.javacodegeeks.com/2012/06/calling-private-java-methods-publicly.html

總結

以上是生活随笔為你收集整理的公开调用私有Java方法?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。