使用java反射库调用静态方法

时间:2017-07-01 05:33:14

标签: java reflection

我试图通过java反射库调用以下静态方法。

import java.net.InetAddress;
import java.net.UnknownHostException;

public class ah
{
  static void a()
  {
    try
    {
      Client.dU = 10;
      Client.dV = 0;
      Client.dX = true;
      cp.d = 32;
      cp.a(InetAddress.getLocalHost());
      Client.iq = Client.E();
      Client.ir = w.a();
      Client.is = 2019030189;
    }
    catch (UnknownHostException localUnknownHostException) {}
  }
}

我目前的代码如下

public void invokeInit() throws NoSuchMethodException, SecurityException, IllegalAccessException,
            IllegalArgumentException, InvocationTargetException {
        Class<?> initClass = loader.loadClass("ah");
        Method initMethod = initClass.getDeclaredMethod("a", null);
        initMethod.invoke(null, new Object[] {});
    }

它给我以下错误

java.lang.IllegalAccessException: Class org.baiocchi.client.reflection.Game can not access a member of class ah with modifiers "static"
    at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102)
    at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:296)
    at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:288)
    at java.lang.reflect.Method.invoke(Method.java:491)
    at org.baiocchi.client.reflection.Game.invokeInit(Game.java:28)
    at org.baiocchi.client.reflection.Game.getApplet(Game.java:33)
    at org.baiocchi.client.Engine.start(Engine.java:21)
    at org.baiocchi.client.Booter.main(Booter.java:6)

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

  

java.lang.IllegalAccessException:Class   org.baiocchi.client.reflection.Game无法访问类的成员   啊修饰语“静态”

如果您想要调用私有或其他不可访问的方法(通常是IllegalAccessException方法而不从类的包中调用它),则抛出

package private。 / p>

您可以在public void setAccessible(boolean flag)对象上调用Method来删除此约束:

initMethod.setAccessible(true);
  

将此对象的可访问标志设置为指示的布尔值   值。值true表示反射对象应该   在使用时禁止Java语言访问检查。价值   false表示反射对象应该强制使用Java语言   访问检查。