java访问private方法求解

java里如何从一个类访问另一个类的private方法 求解,就是成员变量我都知道怎么办,方法不懂

如果是内部类,可以访问,外部类,就不行了,你还是老老实实遵守面向对象的规则吧

既然是私有的当然无法访问 把它改成public就可以啊

利用反射的原理就对私有的属性进行访问。如果不利用反射是访问不到的

java没有友元,非要这样就反射吧

通常来说,既然是私有方法就不应该暴漏给其他类调用。但是你说的问题确实可以通过类反射进行实现。举一个例子如下
package com.zhb.chapter14.rtti;
/**

  • 被调用的类
  • @author zhaohb
    */
    public class InvokedClass {

    public void sayHelloWorld(){
    System.out.println("invoke class say Hello Wolrd");
    }

    private void saySomething(String name){
    System.out.println("Hello: " + name);
    }
    }

package com.zhb.chapter14.rtti;

import java.lang.reflect.Method;
/**

  • 反射调用:可以调用私有/公有方法
  • @author zhaohb / public class InvokeMethod { /*
    • 调用共有方法
    • @throws Exception / @SuppressWarnings({"rawtypes","unchecked"}) public static void callPublicSayHello() throws Exception{ Class clazz = Class.forName("com.zhb.chapter14.rtti.InvokedClass"); Method method = clazz.getDeclaredMethod("sayHelloWorld"); method.setAccessible(true); Object obj = clazz.newInstance(); method.invoke(obj);
      } /
      *
    • 调用私有方法
    • @param name
    • @throws Exception */ @SuppressWarnings({"rawtypes","unchecked"}) public static void callHiddeSaySomething(String name) throws Exception{ Class clazz = Class.forName("com.zhb.chapter14.rtti.InvokedClass"); Method method = clazz.getDeclaredMethod("saySomething", String.class); method.setAccessible(true); Object obj = clazz.newInstance(); method.invoke(obj, name); } public static void main(String[] args) { try { callPublicSayHello(); callHiddeSaySomething("xiaoming"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 参考资料:来自于java编程思想

private是类私有的,不可以给其他类访问,或者你可以改成public或者就反射吧

可以用反射,但是尽量不要破坏规则,别人用private,是有别人自己的用意的。

反射是可以,但是请遵守规则

采用反射获取方法,获取private方法需要使用getDeclaredMethod方法,通过方法名 和 参数列表 来定位方法,得到Method对象,
再采用 invoke方法,传入参数 执行对象 和 方法参数, 即可,
eg:

 public class GetMethod {
    private void priMethod(){
        System.out.println("this is a private method.");
    }

    public void pubMethod(int a, int b) {
        System.out.println("this is a public method. And result of a+b is:" + (a + b));
    }

    public static void main(String[] args) throws Exception {
        Class c = GetMethod.class;
        c.getDeclaredMethod("pubMethod", int.class, int.class).invoke(c.newInstance(),1,1);
    }
}

采用反射获取方法,获取private方法需要使用getDeclaredMethod方法,通过方法名 和 参数列表 来定位方法,得到Method对象,
再采用 invoke方法,传入参数 执行对象 和 方法参数, 即可,
eg:

 public class GetMethod {
    private void priMethod(){
        System.out.println("this is a private method.");
    }

    public void pubMethod(int a, int b) {
        System.out.println("this is a public method. And result of a+b is:" + (a + b));
    }

    public static void main(String[] args) throws Exception {
        Class c = GetMethod.class;
        c.getDeclaredMethod("pubMethod", int.class, int.class).invoke(c.newInstance(),1,1);
    }
}

再加个问题 反射一般用在什么地方?

尽然用了private,说明就是不想被别人访问,你干嘛还要破坏呢

private是类私有的,不可以给其他类访问,或者你可以改成public或者就反射吧